今天图老师小编给大家展示的是一个很实用的Ehlib排序函数适合ADO,精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!
【 tulaoshi.com - 编程语言 】
  Ehlib3.0版本以上虽然支持排序功能,但不支持带有Order By的SQL语句,而且排序很慢;我写的这个排序函数,利用ADO的sort方法,排序很快,几万条数据也是很快。该函数支持Lookup字段排序,不支持计算字段排序,因为计算字段值在内存里高速运算。排序分为:升序、降序和默认三种,支持排序图标。
  
  procedure  SortDBGridEh(Sender: TObject; ACol: Integer;
    Column: TColumnEh);
  var
    FieldName, SortStr: string;
  begin
    Screen.Cursor := crSQLWait;
    try
      if (Sender is TDBGridEh) and
        ((Sender as TDBGridEh).DataSource.DataSet  nil) then
      begin
        if not ((Sender as TDBGridEh).DataSource.DataSet is TCustomADODataSet) then
          Exit;
        if not (Sender as TDBGridEh).DataSource.DataSet.Active then
          Exit;
        FieldName := Column.FieldName;
        if (Sender as TDBGridEh).DataSource.DataSet.FindField(FieldName).IsBlob then
          Exit;
        if (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).FieldKind =
          fkData then
          SortStr := FieldName
        else if (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).FieldKind =
          fkLookup then
          FieldName := (Sender as TDBGridEh).DataSource.DataSet.FieldByName(FieldName).KeyFields
        else
          FieldName := '';
        if (FieldName = '') or (Pos(';', FieldName)  0) then
          Exit;
        case Column.Title.SortMarker of
          smNoneEh:
            begin
              Column.Title.SortMarker := smUpEh;
              TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort :=
                FieldName;
            end;
          smUpEh:
            begin
              Column.Title.SortMarker := smDownEh;
              TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort :=
                FieldName + ' DESC';
            end;
          smDownEh:
            begin
              Column.Title.SortMarker := smNoneEh;
              TCustomADODataSet((Sender as TDBGridEh).DataSource.DataSet).Sort := '';
            end;
        end;
      end;
    finally
      Screen.Cursor := crDefault;
    end;
  end;
  
  --程序实现如下:
  --在DBGridEh的事件OnTitleBtnClick引用该函数即可:
  procedure TFrmU_BasicSetup.dbgAddrCodeTitleBtnClick(Sender: TObject;
    ACol: Integer; Column: TColumnEh);
  begin
     SortDBGridEh(Sender, ACol, Column);
  end;
  --为了保证表格的每一列都能点击触发排序,你需要将你需要排序的列属性 
  --  Title-TitleButton设置为True。
来源:http://www.tulaoshi.com/n/20160219/1619272.html
看过《一个很实用的Ehlib排序函数适合ADO》的人还看了以下文章 更多>>