以ADO数据集相连的DBGrid按单一字段排序通用过程

//适用范围:与ADO数据集相连的DBGrid按单一字段排序
//传入参数:Column(排序字段对应的DBGridColumn),DefaultSort(缺省排序串)
//使用建议:在DBGrid的OnTitleClick中直接调用之。第一次单击某Column标题栏时,按改字段升序排列,连续第二次单击时改为降序,连续第三次单击时,改为缺省方式排序(如PrimaryKey等)
procedure SortDBGrid(Column: TColumn; DefaultSort: string='');
const
  ASCMark: string = '▲';
  DESCMark: string = '▼';
var
  I: integer;
begin
  if not Assigned(Column.Field) then Exit;
  if not Assigned(Column.Field.DataSet) then Exit;
  if not (Column.Field.DataSet is TCustomADODataSet) then Exit;
  if Column.Field.FieldKind <> fkData then Exit;
  for I:=0 to (Column.Collection as TDBGridColumns).Count-1 do
  with (Column.Collection as TDBGridColumns).Items[I].Title do
  begin
    Caption := StringReplace(Caption, ASCMark, '', []);
    Caption := StringReplace(Caption, DESCMark, '', []);
  end;
  try
    with Column.Field.DataSet as TCustomADODataSet do
    begin
      if Sort = Column.FieldName + ' ASC' then
      begin
        Sort := Column.FieldName + ' DESC';
        Column.Title.Caption := Column.Title.Caption + DESCMark;
      end
      else if Sort = Column.FieldName + ' DESC' then
        Sort := Trim(DefaultSort)
      else
      begin
        Sort := Column.FieldName + ' ASC';
        Column.Title.Caption := Column.Title.Caption + ASCMark;
      end;
    end;
  except
    ;//(Column.Field.DataSet as TCustomADODataSet).Sort := '';
  end;
end;

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值