如果我的TcxGrid在 Delphi 中的GridMode True上,我如何使用过滤器

piv4azn7  于 2023-01-08  发布在  其他
关注(0)|答案(1)|浏览(167)

我希望能够过滤TcxGrid组件中加载的记录,我使用GridMode是因为网格在显示我的应用程序表单上的记录时有点慢,但是这种模式不允许我使用列的过滤器(只有默认的)。

我在官方论坛上找到了这个:
可以通过将数据控制器的Filter.AutoDataSetFilter属性值设置为True来实现筛选。这样,筛选表达式将自动应用于基础数据集。同时,请注意,在网格模式下工作的网格不会在列下拉筛选器列表中创建可能的筛选器项列表。但是,您可以在列的OnGetFilterDisplayText或OnGetFilterValues事件或数据控制器的OnGetValueList事件中自行实现此功能。有关这些事件以及如何使用它们的详细信息,请参阅ExpressQuantumGrid的文档。
但是我不知道怎么做,因为我找不到那些文档。任何帮助都将不胜感激

nzk0hqpo

nzk0hqpo1#

DevExpress有一个很棒的支持团队,如果你需要他们产品的帮助,请联系他们。
总之,大体上,它的工作原理如下:您可以使用列的OnGetFilterValues事件通过代码自由地添加值:

procedure TForm1.cxGrid1DBTableView1MYFIELDGetFilterValues(
  Sender: TcxCustomGridTableItem; AValueList: TcxDataFilterValueList);
begin
  AValueList.Add(fviValue, 'Value A', 'Value A', False);
  AValueList.Add(fviValue, 'Value B', 'Value B', False);
  AValueList.Add(fviValue, 'Value C', 'Value C', False);
end;

设置DataControllerFilter.AutoDataSetFilter会导致基础TDataSet.Filter属性自动填充相应的条件。例如:

ShowMessage(cxGrid1DBTableView1.DataController.DataSet.Filter);

((MYFIELD =“值A”)或(MYFIELD =“值B”))
这显然取决于当Filter的属性发生变化时,您所使用的TDataSet的子类如何React。
如果需要更大的灵活性,可以使用DataController.Filter.OnBeforeChangeDataController.Filter.OnChanged事件处理程序。

相关问题