我想实现单击一个按钮后弹出cxgird中的过滤生成器的对话框,生成查询条件后,按过滤生成器中的确定按钮后,重新从数据库中根据过滤生成器中的条件取得数据
问题1: 不知道在代码中用什么方法可以把过滤生成器的对话框弹出来?
问题2:生成查询条件后,怎么根据过滤生成器中的条件重新从数据库中取得数据?

解决方案 »

  1.   

    根据你的要求修改cxFilterDialog.dfm这个文件,之后重新编绎CxGrid...
      

  2.   

    在cxgird单击事件中写代码,使之弹出过滤窗口
    根据生成查询条件,重写数据查询语句不行吗?
      

  3.   

    cxGrid那个功能和excel类似,好强大,我也想找时间研究下
      

  4.   

    cxFilterDialog.dfm这个窗体不是过滤生成器的对话框啊,在cxgrid的源码中根本找不到过滤生成器对话框的源码
      

  5.   

    第1个问题一行代码就搞定了
    //cxGrid为你窗体上的cxGrid控件.
    TcxGridTableView(cxGrid.ActiveView).Filtering.RunCustomizeDialog();
      

  6.   

    如果想从cxFilterDialog做些特殊的处理,修改cxFilterDialog.pas这个单元最简单了,也非常的灵活...
      

  7.   

    多谢cncharles(旺仔),按你的代码第一个问题已经解决。to GARNETT2183
    我上面已经说了cxFilterDialog.pas这个单元不是过滤生成器的源码,它和过滤生成器的区别是它只能过滤一个字段,而过滤生成器可以过滤所有字段,cxFilterDialog这个单元其实就是按了字段头的小按钮弹出来的对话框的源码,而过滤生成器是按了页脚中的定制按钮后所弹出的对话框,而过滤生成器对话框在它的源码中找不到相应的单元,不知道它在什么地方实现的
      

  8.   

    靠, 我晕了……第2个问题其实也很简单的嘛。在cxGridDBTableView的DataController Filter的OnBeforeChange事件
    就要台捕获到Filter Textprocedure TfrmWageBill.tvWageBillDataControllerFilterBeforeChange(
      Sender: TcxDBDataFilterCriteria; ADataSet: TDataSet;
      const AFilterText: string);
    begin
      ShowMessage(AFilterText);
    end;//你测试一下执行几次,在我的电脑上面执行两次, 不明白为什么??
    //如果你再从服务器上获取数据就直接用
    if ADataSet is TADOQuery then begin
      TADOQuery(ADataSet).SQL.Clear;
      TADOQuery(ADataSet).SQL.Text:=SQL //你的SELECT .. WHERE + AFilterText;
      TADOQuery(ADataSet).Active:=true;
    emd;
      

  9.   

    代码未测试, 只告诉你怎么获取Filter Text方法, 搞定要把分都给我了
    要不这个月进不了Top 20.
      

  10.   

    to cncharles(旺仔) 
    问题解决了一定会结分给你
    但AFilterText的值没有显示有字段名称啊,如:( ='a') and ( ='b')
    不知道你那里是不是这样的,
    另外我这里在第一次页脚没有显示条件的时候也会执行2次,显示了条件以后就不会执行2次了,这个问题都不是很大,加个变量判断一下应该就可以了
      

  11.   

    我的显示有字段的,你用的cxGrid是什么版本的.
    我的5.19, 你确定是在DataController Filter的BeforeChange事件中
    写的代码吗?
      

  12.   

    代码确定是在DataController Filter的BeforeChange事件中的
    我的是5.7版本的,我换个版本再试试看