根据cxgrid的filterControl建立强大灵活的过滤器

cxgrid为Delphi 上强大的表格控件,可以基本上不用写代码,就可以完成许多的功能,像排序,过滤,分组等。

现在,我们要完成的就是利用cxgrid的强大的过滤器生成器,生成我们的数据库过滤脚本。

image

虽然,dev express 提供了TcxDBFilterControl 和TcxFilterControl两个控件,但由于没有提供相应的帮助文件,导致使用起来很有难度。

首先,我们需要的是TcxDBFilterControl,这个好办,有控件可以直接用。

接着,怎么用,由于帮助文件的缺乏,这是最大的问题。

从cxDBFilterControl.pas可以看到这么一个函数

function ExecuteDBFilterControlDialog(ADataSet: TDataSet;
  ALookAndFeel: TcxLookAndFeel; AOnApplyProc: TNotifyEvent = nil;
  AOnShowDialog: TNotifyEvent = nil; AColor: TColor = clDefault;
  const AInitialDir: string = ”): Boolean;

注意到,这是全局函数,就是说可以直接使用的。

可以用来对给定的dataset生成相应的filterControl,使用时,只要传入要过滤的dataset,和一个cxgrid的lookandFeel就可以了,当然,要真正的使用,还是需要指定apply或者show的事件代码(TNotifyEvent 类型的,就是只带sender:TObject参数的过程),传入相应的函数名就可以了。

比如说,我要为query1生成一个过滤器,在提交的时候,显示过滤器的文本内容

  1. 创建OnApplyProc事件代码:

procedure OnApplyProc(Sender:TObject);
//sender就是传入的FilterControl本身,
//通过FilterText属性,就可以访问到生成的filter文本了
begin
    showmessage(TcxdbFiltercontrol(sender).FilterText);
end;

2.   调用ExecuteDBFilterControlDialog

procedure TForm1.Button1Click(Sender: TObject);
begin
  inherited;
  ExecuteDBFilterControlDialog(query1,cxgrid1.LookAndFeel,OnApplyProc);
end;

完成。在点击form1的button1后,出现filterbuilding dialog,点击OK之后呢,出现过滤器的文本。

可以通过把TcxDBFIlterControl的filtertext传递给query组件,放在where语句中,就可以实现服务器端的过滤了。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据