I want to sort a grid. I created a memory table and link it to the grid as the data source.I am inserting data to the memory table from a nxQuery object. For the sorting i have to add index as well to the memory table.
This is the index adding and inserting part which is in the form create event
nxMemTable1.IndexDefs.Clear;
nxMemTable1.FieldDefs.Clear;
nxMemTable1.FieldDefs.Add('packpatientid', ftInteger, 0, False);
nxMemTable1.FieldDefs.Add('firstname', ftString, 10, False);
nxMemTable1.FieldDefs.Add('lastname', ftString, 10, False);
while not nxQuery1.EOF do
begin
nxMemTable1.Append;
nxMemTable1.FieldByName('packpatientid').AsInteger := nxQuery1packpatientid.AsInteger;
nxMemTable1.FieldByName('firstname').AsString := nxQuery1firstname.AsString;
nxMemTable1.FieldByName('lastname').AsString := nxQuery1lastname.AsString;
nxMemTable1.Post;
end;
and this is the code that i am trying to sort the memory table
procedure TForm1.Button2Click(Sender: TObject);
begin
nxMemTable1.IndexFieldNames := 'firstname';
end;
but this is not working. when i click the button it says "No index for field 'firstname'"
This works with the standard TClientDataSet.
I created a new VCL Forms project, dropped a TClientDataSet on the form, and named it CDS
for simplicity in the code. I then added a TDataSource, assigned CDS
to its DataSet property, added a TDBGrid, and assigned DataSet1
as its DataSource. I then created two event handlers, one for the Form1.OnCreate
event and one for the DBGrid1. OnTitleClick
event.
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
sField: string;
begin
sField := Column.FieldName;
if sField <> CDS.IndexFieldNames then
CDS.IndexFieldNames := sField;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CDS.FieldDefs.Add('LastName', ftString, 30);
CDS.FieldDefs.Add('FirstName', ftString, 30);
CDS.FieldDefs.Add('ID', ftInteger);
CDS.CreateDataSet;
CDS.AppendRecord(['Smith', 'John', 3]);
CDS.AppendRecord(['Doe', 'Jane', 1]);
CDS.AppendRecord(['Adams', 'Quincy', 2]);
CDS.IndexFieldNames := 'LastName';
end;
Running the application and clicking on any of the column titles immediately sorts the DBGrid by that column (if it's not already sorted by that column).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With