如何使用 Ehlib 实现自动排序(转)

来源:互联网 发布:mysql 显示字符集 编辑:程序博客网 时间:2024/05/01 23:10

在 Ehlib 的 DataService 文件夹下提供了一些可以使数据集实现自动排序的文件。TDBGridEh 使用这些文件中的相关对象可以实现当排序标记发生变化时实现自动排序。

  如果你改变了数据网格及标题的排序标记而没有书写 OnSortMarkingChanged 事件,数据网格将尝试自动进行数据排序。DBGridEhDataService 尝试通过 GetDatasetFeaturesForDataSet 查找 TDataSet 中可以排序的特定的对象。正如你所知道的,TDataSet 不支持数据排序,但它的派生对象 TQuery 或 TClientDataSet 却允许实现数据排序。使用过程 RegisterDatasetFeaturesEh ,你可以注册 TDatasetFeaturesEhClass 类,该类可以实现对 TQuery, TADOQuery 以及 TClientDataSet 对象进行排序。简单地通过 uses 子句添加 Ehlib...(EhlibBDE,EhlibADO,EhlibCDS)的单元之一到你的工程的任意单元中,与它们相连的数据网格将自动对该数据集进行排序。 EhLibBDE, EhLibADO, EhLibCDS 通过在单元数据集中调用 RegisterDatasetFeaturesEh 过程来实现初始化。对于其它数据集类型,你必须编写、并注册可以实现该数据集排序的新对象。书写过程 T[你的数据集]DatasetFeaturesEh.ApplySorting ,你可以存取那些使用了 SortMarkedColumns 属性的列以实现直接排序。你可以查看 DbUtilsEh 单元中的示例以明白如何编写T[你的数据集]DatasetFeaturesEh 类及查看 EhLibBDE 单元以明白如何注册 T[你的数据集]DatasetFeaturesEh 类。

引擎      数据集      单元文件

BDE      TQuery      EhLibBDE
ADO      TADOQuery    EhLibADO
ClientDataSet TClientDataSet  EhLibCDS
DBExpress   TSQLQuery    EhLibDBX
InterBase   Express TIBQuery EhLibIBX

【译者注】:
  实际上,实现该功能非常简单(以下我以BDE为例说明如何实现自动排序):
  1.在窗体上放置一个 DBGridEh 组件,并将其连接到相应的 BDE 数据集;
  2.将该组件的[OptionsEn]中的 dgAutoSortMarking 属性设置为 True;
  3.双击该组件,在其弹出的属性编辑器中添加相关字段;
  4.将要排序的字段的属性列表的 [Title]的 TitleButton 属性设置为 True;
  5.最后,千万不要忘了在 uses 子句中加上 EhlibBDE单元。    (如果使用的是ADO 那么需要引用EhLibADO )

好了,使用上面的方法,你会发现原来通过 Ehlib 实现数据的自动排序居然如些简单!

 

通过以上方法,无须增加任何代码,就可实现点击EHlib的标题栏实现排序。

注意:以上方法在遇到带有Order by字句的时候 会报错。具体解决办法可参考:

http://blog.csdn.net/lotusyangjun/archive/2010/12/13/6073166.aspx