一个很实用的Ehlib排序函数适合ADO

2016-02-19 18:52 31 1 收藏

今天图老师小编给大家展示的是一个很实用的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;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

        FieldName := Column.FieldName;
        if (Sender as TDBGridEh).DataSource.DataSet.FindField(FieldName).IsBlob then
          Exit;

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

        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

延伸阅读
标签: Web开发
众所周知,ADO.NET相对于ADO的最大优势在于对于数据的更新修改可以在与数据源完全断开联系的情况下进行,然后再把数据更新情况传回到  数据源。这样大大减少了连接过多对于数据库服务器资源的占用。下面是我在《ADO.NET实用指南》这本书上看到的一个例子,比较清楚的讲解  了ADO.NET的使用方法。  Imports System.Data...
标签: PHP
  之所以是能写出来这个函数,主要是对该网站的session结构清楚,如:name|s:4:"tasm";passwd|s:6:"111111";mode|s:1:"1",也知道该session存放的位置,而且可以上传文件,所以嘛,当时就做了一次小小的黑客,在线的朋友的密码可以一览无余,呵呵: <? function submit1(){ global $username; print ...
标签: Web开发
ff下onmousemove鼠标按不按都是1所以就不能这样用了 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
标签: PHP
  前面见到有人发表 但是速度比较慢,也非常长 这里给出一种 function ubb($str) {   $color=Array('red','blue','green'); $str=eregi_replace('\[url\]([a-zA-Z0-9@:%_.~#-\?&]+)\[\/url\]','<a href=http://\\1\\1</a',$str);//url $str=eregi_replace('\[url=http://([a-zA-Z0-9@:%_.~#-\?&]+)\](.+)...
标签: PHP
我的目标是去掉字符串中的空格,句号和逗号。 $str="hello baby,nice to meet you.hehe";//这样可以正确显示 $str="hello baby,nice to meet you . hehe";//如果在句号前面或后面多了个空格就会出现数组里某个键的值为空,也就是说当需要去掉的字符一起出现时,就会出现空值,这是为何,该如何解决? //我的一个方法是判断值是否...

经验教程

166

收藏

30
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部