DBGridEh自定义排序

DBGridEh的排序行为不一定符合自己的要求,我更喜欢自定义它的排序过程。

1、先定义两个过程,接管它的排序行为

  1. procedure DBGridEhSortMarkingChanged(Sender: TObject);
  2. var
  3.   i: Integer;
  4.   strTemp: WideString;
  5.   DBGridEh: TDBGridEh;
  6. begin
  7.   DBGridEh := (Sender as TDBGridEh);
  8.   (DBGridEh.DataSource.DataSet as TADOQuery).Sort := '';
  9.   for i := 0 to DBGridEh.Columns.Count - 1 do
  10.   begin
  11.     if DBGridEh.Columns[i].Title.SortMarker <> smNoneEh then
  12.     begin
  13.       if DBGridEh.Columns[i].Title.SortMarker = smUpEh then
  14.         strTemp := DBGridEh.Columns[i].FieldName + ' ASC'
  15.       else if DBGridEh.Columns[i].Title.SortMarker = smDownEh then
  16.         strTemp := DBGridEh.Columns[i].FieldName + ' DESC';
  17.       (DBGridEh.DataSource.DataSet as TADOQuery).Sort := strTemp;
  18.       break;
  19.     end
  20.     else begin
  21.       //(DBGridEh.DataSource.DataSet as TADOQuery).Sort := '';
  22.     end;
  23.   end;
  24. end;
  25. procedure DBGridEhTitleBtnClick(Sender: TObject; ACol: Integer;
  26.   Column: TColumnEh);
  27. begin
  28.   case Column.Title.SortMarker of
  29.     smNoneEh: Column.Title.SortMarker := smUpEh;
  30.     smUpEh  : Column.Title.SortMarker := smDownEh;
  31.     smDownEh: Column.Title.SortMarker := smNoneEh;
  32.   end;
  33.   DBGridEhSortMarkingChanged(Sender);
  34. end;

2、将DBGridEh的OnTitleBtnClick事件动作指定为刚才定义好的过程:

  DBGridEhTitleBtnClick(Sender, ACol, Column);

3、设置DBGridEh各列的Title.TitleButton属性值为TRUE。

4、完成。

注意,数据组件须为ADOQUERY。

你可能感兴趣的:(DBGridEh自定义排序)