procedure DBGridSort(FSortColumn: TColumnEh;out pbASC:boolean);
var
OldIndex: string;
begin
// if (FSortColumn.Grid.DataSource = nil) then Exit;
// if not (FSortColumn.Grid.DataSource.DataSet.Active) then Exit;
OldIndex := TClientDataset(FSortColumn.Grid.DataSource.DataSet).IndexName;
if OldIndex <> '' then
begin
TClientDataset(FSortColumn.Grid.DataSource.DataSet).IndexName := '';
TClientDataset(FSortColumn.Grid.DataSource.DataSet).DeleteIndex(OldIndex);
end;
case pbASC of
True:
begin
if FSortColumn.Field.FieldKind = fkLookUp then
TClientDataset(FSortColumn.Grid.DataSource.DataSet).AddIndex('px', FSortColumn.Field.KeyFields, [ixDescending]) //已经是升序就按降序排列
else if FSortColumn.Field.FieldKind = fkData then
TClientDataset(FSortColumn.Grid.DataSource.DataSet).AddIndex('px', FSortColumn.Field.FieldName, [ixDescending]);
end;
else //否则按升序排列
begin
if FSortColumn.Field.FieldKind = fkLookUp then
TClientDataset(FSortColumn.Grid.DataSource.DataSet).AddIndex('px', FSortColumn.Field.KeyFields, [ixPrimary])
else if FSortColumn.Field.FieldKind = fkData then
TClientDataset(FSortColumn.Grid.DataSource.DataSet).AddIndex('px', FSortColumn.Field.FieldName, [ixPrimary]);
end;
end; {end case}
TClientDataset(FSortColumn.Grid.DataSource.DataSet).IndexName := 'px';
pbASC := not pbASC;
end;
var
OldIndex: string;
begin
// if (FSortColumn.Grid.DataSource = nil) then Exit;
// if not (FSortColumn.Grid.DataSource.DataSet.Active) then Exit;
OldIndex := TClientDataset(FSortColumn.Grid.DataSource.DataSet).IndexName;
if OldIndex <> '' then
begin
TClientDataset(FSortColumn.Grid.DataSource.DataSet).IndexName := '';
TClientDataset(FSortColumn.Grid.DataSource.DataSet).DeleteIndex(OldIndex);
end;
case pbASC of
True:
begin
if FSortColumn.Field.FieldKind = fkLookUp then
TClientDataset(FSortColumn.Grid.DataSource.DataSet).AddIndex('px', FSortColumn.Field.KeyFields, [ixDescending]) //已经是升序就按降序排列
else if FSortColumn.Field.FieldKind = fkData then
TClientDataset(FSortColumn.Grid.DataSource.DataSet).AddIndex('px', FSortColumn.Field.FieldName, [ixDescending]);
end;
else //否则按升序排列
begin
if FSortColumn.Field.FieldKind = fkLookUp then
TClientDataset(FSortColumn.Grid.DataSource.DataSet).AddIndex('px', FSortColumn.Field.KeyFields, [ixPrimary])
else if FSortColumn.Field.FieldKind = fkData then
TClientDataset(FSortColumn.Grid.DataSource.DataSet).AddIndex('px', FSortColumn.Field.FieldName, [ixPrimary]);
end;
end; {end case}
TClientDataset(FSortColumn.Grid.DataSource.DataSet).IndexName := 'px';
pbASC := not pbASC;
end;