procedure TForm1.DBGrid1TitleClick(Column: TColumn);
var
s,cFieldName:string;
i:integer;
DataSet:TDataSet;
begin
Try
DataSet:=Column.Grid.DataSource.DataSet;
if not DataSet.Active then exit;
if Column.Field.FieldKind=fkLookup then
cFieldName:=Column.Field.KeyFields
else if Column.Field.FieldKind=fkCalculated then
cFieldName:=Column.Field.KeyFields
else
cFieldName:=Column.FieldName;
if DataSet is TCustomADODataSet then begin
s:=TCustomADODataSet(DataSet).Sort;
if s='' then begin
s:=cFieldName;
end
else begin
if Pos(cFieldName,s)<>0 then begin
i:=Pos('DESC',s);
if i<=0 then begin
s:=s+' DESC';
end
else begin
Delete(s,i,4);
end;
end
else begin
s:=cFieldName;
end;
end;
TCustomADODataSet(DataSet).Sort:=s;
end
else if DataSet is TClientDataSet then begin
if TClientDataSet(DataSet).indexfieldnames<>'' then
begin
i:=TClientDataSet(DataSet).IndexDefs.IndexOf('i'+Column.FieldName);
if i=-1 then
begin
with TClientDataSet(DataSet).IndexDefs.AddIndexDef do
begin
Name:='i'+Column.FieldName;
Fields:=Column.FieldName;
DescFields:=Column.FieldName;
end;
end;
TClientDataSet(DataSet).IndexFieldNames:='';
TClientDataSet(DataSet).IndexName:='i'+Column.FieldName;
end
else
begin
TClientDataSet(DataSet).IndexName:='';
TClientDataSet(DataSet).IndexFieldNames:=column.fieldname;
end;
end;
Except
End;
end;
DBGrid单击标题自动排序
最新推荐文章于 2026-06-21 13:50:40 发布
本文介绍了一个关于Delphi中DBGrid1组件的点击排序功能实现方法,通过修改DBGrid1TitleClick事件处理程序来改变数据集的排序方式及客户端数据集的索引设置。该方法适用于使用Delphi开发的应用程序,特别是那些需要动态排序和索引功能的数据展示场景。

951

被折叠的 条评论
为什么被折叠?



