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

  • 相关阅读:
    函数的节流和函数的防抖
    微信小程序开发
    当后端人员未提供接口,前端人员该怎么测试 --mock
    vue之写发表评论思路
    vue之头像管理思路
    numpy 索引切片迭代
    numpy 通用函数
    numpy 数组运算
    numpy 创建数组
    numpy 数据类型
  • 原文地址:https://www.cnblogs.com/qzfitsoft/p/2405351.html
Copyright © 2011-2022 走看看