EhLib 使用教程:Ehlib 过滤功能的实现

DBGridEh 可以为你提供一个更加美观和功能丰富的 DBGird,比如平面化显示、奇偶行不同颜色(斑马线)、快速查找、合计行、Grid 打印等。在 Ehlib 的后期版本中,还提供了一个非常强大的过滤功能,他会在 DBGrid 的表头下方显示一个过滤行,用户在此行的相应列中输入查询条件,DBGridEh 可以自动为您筛选出所需要的数据。下图所示即为启用过滤功能后的 DBGridEh:

鉴于之前 EhLib 汉化版发布时,很多人问到 EhLib 过滤功能的实现方式,并要求提供一个示例,所以下面我会简单介绍一下 EhLib 过滤功能的实现,相关代码及可执行文件会发布到 Delphi 盒子,请到那里去搜索并下载。

1、过滤实现的前提条件:uses EhlibADO, EhlibBDE 等 ….

要实现 DBGridEh 的自动过滤,必须先添加 Ehlib 的几个相关 unit 到你的 project 中,如果你使用的是 ADO 连接数据库,请在工程任一 unit 的 uses 列表中添加 EhlibADO,如果使用的是 BDE,请添加 EhlibBDE,其他可能添加的还有:EhlibCDS、EhlibDBX、EhlibIBX、EhlibMTE;

2、启用过滤,显示过滤行:DBGridEh.STFilter.Visible := True

DBGridEh 默认不显示过滤行,设置 STFilter.Visible 为 True 过滤行就显示出来了。

3、选择:客户端还是服务器端过滤?DBGridEh.STFilter.Local = True|False

这一步很主要。客户端过滤也就是 Query 自身的过滤功能,在内存中过滤,不会到服务器端去查询,优点是实现简单,过滤速度快,缺点就是只能获得本地更新的数据,其他用户新增和修改的数据无法实时反映出来。

DBGridEh 服务器端过滤的实现方式是“拼凑”SQL 语句。在过滤之前,DBGridEh 绑定的 Query 的 SQL 语句必须含有 DBGridEh 指定的一个过滤标记,该过滤标记默认为 /*Filter*/,其必须在 SQL 任一行的行首,当用户输入过滤值时,EhLib 生成过滤条件,并且用此条件替换过滤标记之后的内容,然后将新的SQL 语句发送到数据库端去执行,获得的即为过滤后的数据。

具体应该使用哪种过滤方式,需根据实际要求选用。

4、客户端过滤(本地过滤)的实现:DBGridEh.STFilter.Local := True

客户端过滤实现比较简单,而且容易理解,设置 Local 为 True,过滤功能就 OK 了。

5、服务器端过滤的实现:DBGridEh.STFilter.Local := False

服务器端过滤需设置 Local 为 False,然后剩下的就是 SQL 语句,SQL 一般为以下样式:

AdoQuery. SQL. Text := 'SELECT * FROM Students WHERE ' + #13 + '/*Filter*/1=1';

以上代码生成的 SQL 在 SQL Server 等支持 /* 注释的数据库中会非常正确的执行,但在 Access 中就会出错,解决方案也很简单,更改 DBGridEh 的过滤标记即可:

DBUtilsEh. SQLFilterMarker := '(1>0)AND';

那么 Query 的 SQL 应该为以下:

AdoQuery. SQL. Text := 'SELECT * FROM Students WHERE ' + #13 + '(1>0)AND 1=1';

服务器端过滤也 OK 了!

注:如果你使用的是 Delphi 2007,你可能会发现当你完全无误按以上设置后,服务器端过滤功能还是无效,这是由于 Ehlib DBUtilsEh 单元的一处 Bug 造成的,此 Bug 产生的原因请查看该文:EhLib 4.1 在 Delphi 2007 下无法过滤和排序的问题。(本示例代码中包含了修正过的 DBUtilsEh,请到 Delphi 盒子下载)

6、过滤行下拉列表的实现:Column.STFilter.ListSource、ListField、KeyField

DBGridEh 的过滤行可以将某列已存在的值以 ComboBox 的形式显示出来,要实现此功能,需设置 DBGridEh 列的 STFilter 属性。将 ListSource 设为要下拉显示的数据源,ListField 为下拉列表显示的字段,KeyField 为构建查询表达式使用的字段。

设置以上属性后,你可能发现虽然下拉列表显示出来了,但选择下拉列表值后,DBGridEh 却没有自动过滤,在单元的 initialization 节添加以下代码即会自动过滤了:

DBGridEhCenter. FilterEditCloseUpApplyFilter := True;

这个方法感觉很奇怪,而且在使用中好像也有问题,当输入 > <这样的表达式时,查询时会出错。在官方的 Demo 中,是通过内存表的方式实现的,而且不用设置任何属性(上面的 ListSource 等都不用设置),即可自动在过滤行每列处显示下拉列表,详细用法请参照 Ehlib 安装目录下的 Demo。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: ehlib langresources 是一个应用程序开发库,它可以帮助开发人员在应用程序中管理和处理多语言资源。 使用 ehlib langresources,开发人员可以将应用程序的用户界面及相关文本内容翻译成多种语言,并且根据系统设置或用户设置,动态切换应用程序的语言。 ehlib langresources 提供了一些方便的功能和方法,使开发人员可以更轻松地管理语言资源。它支持将不同语言的文本保存在外部文件中,这样开发人员就可以将翻译工作分配给专门的团队或人员。同时,它还提供了一些工具,如翻译编辑器和导出工具,方便开发人员进行翻译和导出。 使用 ehlib langresources,开发人员可以根据需要动态切换应用程序的语言。这就意味着开发人员可以为不同的用户提供更加友好和个性化的用户界面,以满足他们的需求。同时,开发人员可以根据用户的设置,自动切换应用程序的语言,提供更好的用户体验。 总的来说,ehlib langresources 是一个强大的工具,可以帮助开发人员轻松管理和处理多语言资源。它提供了一些方便的功能和方法,使开发人员可以更好地处理应用程序的多语言需求,并提供更好的用户体验。 ### 回答2: ehlib是一个Delphi开发工具包,提供了丰富的组件和函数,可用于加强和扩展Delphi应用程序的功能ehlib的一个主要用途是为Delphi数据库应用程序提供支持。它包含了一系列功能强大的数据控件和数据集,例如EhDBGrid、EhLibMEMDS、EhLibIBX等。这些数据控件和数据集可以帮助开发人员更方便地显示和编辑数据库中的数据,并提供了许多自定义选项和事件来满足不同应用程序的需求。 此外,ehlib还提供了许多其他有用的组件和函数,例如TreeGrid、Calculator、RichView等。这些组件可以帮助开发人员在应用程序中实现更复杂和丰富的功能,例如树形列表、计算器、富文本编辑等。 使用ehlib的过程相对简单。首先,我们需要在Delphi环境中安装和注册ehlib包。然后在项目中添加相应的ehlib组件,并根据需求进行配置和使用。通过属性设置、事件处理和方法调用等方式,我们可以根据具体需求定制和扩展ehlib功能。 总之,ehlib是一个强大的Delphi开发工具包,为开发人员提供了丰富的组件和函数,可以帮助他们更方便地开发和扩展Delphi应用程序的功能。无论是用于数据库应用程序,还是其他类型的应用程序,ehlib都可以提供必要的支持和帮助。 ### 回答3: ehlib langresources 的使用非常方便和灵活。ehlib langresources 是一款用于多语言支持的库,它可以帮助开发者实现多国语言的应用程序。 首先,我们可以使用 ehlib langresources 创建一个多语言资源文件。这个资源文件包含了程序中用到的所有文字和语句的翻译。我们可以按照需求添加不同语言版本的翻译,比如中文、英文、法文等等。 接下来,在程序中我们可以通过调用 ehlib langresources 提供的方法来加载对应语言的翻译资源。这样,程序就可以根据用户的语言设置自动选择合适的翻译资源进行显示。这样的设计使得应用程序更加友好,用户可以在他们熟悉的语言环境下操作。 除了加载翻译资源,ehlib langresources 还提供了一些其他有用的功能。比如,我们可以根据语言设置动态更改应用程序中的语言显示,而不需要重新启动应用程序。另外,ehlib langresources 还支持热更新翻译资源,这意味着我们可以在不停止应用程序的情况下更新翻译内容。 总的来说,ehlib langresources 是一个强大的多语言支持库,它可以帮助开发者快速实现多国语言的应用程序。在国际化的背景下,ehlib langresources 提供了方便易用的功能,使得应用程序可以适应不同的语言环境,提高用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值