DxGrid的排序问题
客户的要求,不得不完成这个伤脑筋的问题。
问题表现:
DxGrid中选中第一条数据(及当前行号为1),再点击某列头排序后,此时选中的记录排到了最后(及当前行号为100)
要求表现:
排序后,选中的选中行号仍然为1,或者取消焦点移动效果。
不知道大家是否明白呢?
[解决办法]
点击排序后对数据集取first?
[解决办法]
1.当用户点击时,记录行号,可以使用数据库的RecordNO
2.排序后,再使用:Move,移动到此RecordNO
我最简单的写一些,具体你可以完善参考一下:
- Delphi(Pascal) code
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, Grids, DBGrids, ADODB;type TForm1 = class(TForm) ADOConnection1: TADOConnection; ADODataSet1: TADODataSet; DBGrid1: TDBGrid; DataSource1: TDataSource; Edit1: TEdit; Edit2: TEdit; procedure DBGrid1TitleClick(Column: TColumn); procedure ADODataSet1AfterScroll(DataSet: TDataSet); private { Private declarations } public { Public declarations } RecordNo:Integer; end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.ADODataSet1AfterScroll(DataSet: TDataSet);begin RecordNo:=DbGrid1.DataSource.DataSet.RecNo; //在滚动的时候记录位置end;procedure TForm1.DBGrid1TitleClick(Column: TColumn);begin AdoDataSet1.AfterScroll:=Nil; //关闭滚动提示 AdoDataSet1.Close; AdoDataSet1.CommandText:='select * from Glass order by '+Column.Title.Caption; //根据单击的头进行排序 AdoDataSet1.Open; AdoDataSet1.MoveBy(RecordNo); //移动到原来的位置 AdoDataSet1.AfterScroll:=AdoDataSet1AfterScroll; //打开记录滚动位置end;end.