读书人

DxGrid的排序有关问题

发布时间: 2012-02-26 20:19:43 作者: rapoo

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. 

读书人网 >.NET

热点推荐