zoukankan      html  css  js  c++  java
  • 一个很实用的Ehlib排序函数,适合ADO

    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.haoxiai.net/) 网址:http://www.haoxiai.net/bianchengyuyan/Delphi/14025.html

  • 相关阅读:
    AdaBoost算法学习
    梯度下降与随机梯度下降
    Logistic Regression学习
    PCA算法
    VS2013常见错误排查
    K临近算法
    遗传算法小结
    SLIC超像素(superpixel)算法
    openslide api函数概要
    线程钩子
  • 原文地址:https://www.cnblogs.com/qzfitsoft/p/2405351.html
Copyright © 2011-2022 走看看