使用cxGrid,调用内部提供的过滤功能,现在我想操作过滤后的数据,如显示筛选后有多少条记录满足要求,再者,将筛选后的数据进行别的操作等等。
在DEVExpress技术支持搜索出几个方法,都没达到要求,一是设置AutoDataSetFilter ,后速度明显慢很多,而且操作时还有不少ado错误提示出现。
二是handle the OnBeforeChange event,但处理这个事件后,内部过滤功能就没有了,还是手工应用到DataSet的FILTER属性上,或使用 SQL查询,速度要比原来慢多了,
有用过的人提供个好的方法?其实如何获取OnBeforeChange事件中的AflterText属性即可。不清楚怎么在外部查询后获取?

解决方案 »

  1.   

    建议你使用<view>.DataControllerFilterBeforeChange 这个事件来处理你的需求。
    你可以在您的程序内定义一个单元内全局的变量来读取这个事件中的 AFilterText 内容。
    不如
    pSQLWhere := AFilterText;在你程序需要的地方读取 pSQLWhere 就可以了,如果 pSQLWhere 为空,那么就是用户并没有设置过滤内容。
      

  2.   

    下面是我实现的代码,你参考一下。其实,这个问题是因为CXGrid的过滤条件没赋值给数据库控件。
    procedure TfmQueryImportData.tvImportDataDataControllerFilterBeforeChange(
      Sender: TcxDBDataFilterCriteria; ADataSet: TDataSet;
      const AFilterText: String);
    begin
      spImportData.Filtered := False;
      spImportData.Filter   := AFilterText;
    end;procedure TfmQueryImportData.tvImportDataDataControllerFilterChanged(
      Sender: TObject);
    begin
      spImportData.Filtered        := True;
      sbImportData.Panels[1].Text  := '共有' + IntToStr(spImportData.RecordCount) + '条记录';
    end;
      

  3.   

    更方便的方法:YourTableView.DataController.Filter.AutoDataSetFilter=True