with query do begin sql.clear; sql.add('....order by...'); close; open; end;
for i:=0 to DBGrid1.Columns.Count-1 do DBGrid1.Columns.Items[i].Title.Caption:=DBGrid1.Columns.Items[i].DisplayName; if ADODataSet1.Sort=Column.FieldName+' ASC ' then begin Column.Title.Caption:='↑'+Column.DisplayName; ADODataSet1.IndexFieldNames:=Column.FieldName+' DESC ' end else begin Column.Title.Caption:='↓'+Column.DisplayName; ADODataSet1.IndexFieldNames:=Column.FieldName+' ASC ' end;
一般是寫在DBGRID的ONTITLECLICK事件中,刷新GRID裡面的數據
这样的话,你就可以在 DBGrid的titleclick事件中想对哪个字段排序就对哪个字段排序了.而且是全动态的排序
使用ADO的话直接:
ADOTable1.Sort:='某个字段';
dbgrid1.sort:=colmun.fieldname;
DBGrid.DataSource.DataSet.Sort:=Column.FieldName;
或者
ADOQuery.Sort:=Column.FieldName;ADOQuery是你的DBGrid关联的数据源
begin
sql.clear;
sql.add('....order by...');
close;
open;
end;
DBGrid1.Columns.Items[i].Title.Caption:=DBGrid1.Columns.Items[i].DisplayName; if ADODataSet1.Sort=Column.FieldName+' ASC ' then
begin
Column.Title.Caption:='↑'+Column.DisplayName;
ADODataSet1.IndexFieldNames:=Column.FieldName+' DESC '
end
else
begin
Column.Title.Caption:='↓'+Column.DisplayName;
ADODataSet1.IndexFieldNames:=Column.FieldName+' ASC '
end;
DBGrid.DataSource.DataSet.Sort:=Column.FieldName;
或者
ADOQuery.Sort:=Column.FieldName;ADOQuery是你的DBGrid关联的数据源注:拷贝自星星农场。。