如何使用 Ehlib 实现自动排序
??? 在 Ehlib 2.6 版的 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单元。
好了,使用上面的方法,你会发现原来通过 Ehlib 实现数据的自动排序居然如些简单!