1.三个属性让DBGridEH可以点击表头自动排序
只要设置下面三个属性:
ColumDefValues->Title->TitleButton设为TRUE
sortlocal 设为TRUE
OptionsEH->dghautosortmarking设为TRUE
最后,一定要记得在pas文件的uses里引用上ehlib***,我这里的是ehlibCDS,网上也有的是ehlibBDE。我这里的情况是如果没有引用这个ehlibCDS,在点击dbgrideh表头时出现了小三角号,但就是不排序。
2.ehlib 自动过滤和排序
--------------------------------------------------------------------------------
delphi版本
ehlib版本 5.2.84
方式 TADOQuery + TDataSetDriverEh + TMemTableEh + TDataSource + DBGridEh
--------------------------------------------------------------------------------------
过滤:
1. DBGridEh.STFilter.Local := True
DBGridEh.STFilter.Visible := True
2. uses EhLibMTE;
DONE!
排序
1. DBGridEh.SortLocal := True
DBGridEh.OptionsEh.dghAutoSortMarking := True
DBGridEh.OptionsEh.dghMultiSortMarking := True
DONE!
一、DBGridEH点击标题自动排序的设定
①按DataSet源类型的不同,在工程中引用EhLib相应排
序单元文件,如uses EhLibAdo,uses EhLibCDS,uses EhLibBDE、uses
EhLibDBX等,我一般都会在一个公共文件中进行引用,这样就无须在所有用到DBGridEH的单元中都城加入引用语句了,如在DataModule
之类的公共窗体中uses EhLibXXX;一次就行了。
②设置DBGridEH的OptionsEH.dghAutoSortMarking := True;如果希望多列排序还可设置OptionsEH.dghMultiSortMarking := True;
③如果你的DataSet源是TClientDataSet,且只想对已下载到本地的数据进行排序的话,则请设置DBGridEH的SortLocal := True;
④
设置DBGridEH中所有希望进行排序的列标题的按钮属性为True,即Columns[i].Title.TitleButton :=
True;字段类型为LookUp类型或计算字段不能排序,故这类字段
列的TitleButton应设置为False,否则点击标题进行排序时会发生异常。
至此,点击DBGridEH标题就可以自动排序了,多列排序需按下Ctrl键。
但是有一个小 BUG(我使用的是EhLibCDS),那就是标题列上的排序图标和排序结果不相符,当升序排列时出现的不是向上的箭头,而是向下的箭头,降序则相反。这应该是EhLib中的设置标题重画方法时赋反了一个逻辑标志值。如何修正它呢?
二、排序标志相反BUG的修正
方法一、最佳方法,找到问题源,修正它!可惜,我没找到。
方法二、修改DBGridEH.res,把两个bmp图标文件对换一下,有点麻烦。
方法三、大致翻阅一下DBGridEH源码,发现排序图标文件标志是由两个常量定义的,
const
...
bmSmDown = 'DBSMDOWNEH';
bmSmUp = 'DBSMUPEH';
...
这就好办了,在此对换一下,又安全又快捷
//bmSmDown = 'DBSMDOWNEH'; //这是原始内容
//bmSmUp = 'DBSMUPEH'; //这是原始内容
bmSmDown = 'DBSMUPEH'; // Modified by 小宇飞刀 2009-10-24 10:31:26
bmSmUp = 'DBSMDOWNEH'; // Modified by 小宇飞刀 2009-10-24 10:31:26
至此,一切OK!
=======================================2014.03.14======================================
我自己的总结,我以后开发不在用ado了,以后就用TSqlConnection + TSqlQuery + TDataSetPrevider + TClientDataSet + TDataSource 这种模式了
所以DbGrideh 要想自动排序,只需要排序 本地的内存数据库就可以了,不用写代码 ,dbgrideh的设置如下:
1.ColumDefValues->Title->TitleButton设为TRUE
2.sortlocal 设为TRUE
3.OptionsEH->dghautosortmarking设为TRUE
就可以了!...
=============================2014.03.19世界变化的真快,我现在用上FireDac了,巨爽无比,DBX控件Bug太多,最终放弃了==============
通过这次转变,学习了太多的东西,知道原来链接驱动还有UniDac,FireDac且更加强大方便,还跨平台,网店管家用的就是UniDac...;delphi 收购了AnyDac改名成FireDac
这个以后才是delphi的方向,FireDac + FireMonkey 跨平台的开发语言,原生程序 跨平台的框架 跨平台的数据库链接驱动,方向巨对,Delphi又要腾飞了,传奇又要开始了
用上了FireDac后感觉就是 下一代 跨平台的 BDE 我靠,巨强...;
针对FireDac 下 dbgrideh 排序的问题,是这样的;
1.ColumDefValues->Title->TitleButton设为TRUE
2.sortlocal 设为TRUE
3.OptionsEH->dghautosortmarking设为TRUE
4.把EhLibFireDAC添加到项目中就可, 其他需要排序的窗体,不需要引用,只需要 把这个添加到项目中就可.草草草.....
本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/p/3600122.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2012-03-14 delphi IDE exe 文件输出路径