DevExpress网格中奇怪的过滤器行为



我有一个表单,有2个网格,显示使用Devart UniQuery上的主-细节选项选择的记录。这个工作非常好,详细显示了与主人有关的通缉记录。我可以选择使用过滤器来选择记录(公司)。这是通过30个按钮来完成的,每个按钮上都有一个字母,然后当我按下一个按钮时,我用这个代码设置过滤器

procedure TfrmJsCompanies.ButtonClick(Sender: TObject);
var
  ButtonValue: char;
  FilterString: string;
begin
  ButtonValue := (Sender as TcxButton).Caption[1];
  FilterString := ButtonValue + '%';
  with grdCompaniesView1.DataController.Filter.Root do
    begin
      Clear;
      BoolOperatorKind := fboOr;
      AddItem(colCompany_Name, foLike, FilterString, FilterString);
    end;
  grdCompaniesView1.DataController.Filter.Active := True;
  grdCompaniesView1.FilterRow.Visible := False;
  ActiveControl := grdCompanies;
end;

如果我这样做,我会得到我期望的结果,除非我先按下一个按钮,给我有详细记录的主记录,然后按下一个按钮,给我没有主记录-在这种情况下,从以前的选择的详细记录仍然显示在我的详细网格

我怎么做才能摆脱这个?

这种行为是由于过滤是在cxGrid级别执行的,而不是在DataSet级别执行的,因此,没有过滤DataSet。
处理这个问题的一种方法是:

procedure TForm1.DetailViewFilterRecord(ADataController: TcxCustomDataController; ARecordIndex: Integer;
  var Accept: Boolean);
begin
  Accept := MasterView.DataController.FilteredRecordCount >0;
end;
procedure TForm1.MasterViewDataControllerFilterChanged(Sender: TObject);
begin
   DetailView.DataController.Refresh
end;

相关内容

  • 没有找到相关文章

最新更新