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

问题描述 投票:0回答:2

我希望能够过滤在我的

TcxGrid
组件中加载的记录,我有
GridMode
,因为网格在我的申请表上显示记录有点慢,但这种模式不允许我使用列(只是默认列)。

我在官方论坛上找到了这个:

可以通过将数据控制器的 Filter.AutoDataSetFilter 属性值设置为 True 来实现过滤。这样,过滤表达式将自动应用于基础数据集。同时,请注意,在网格模式下工作的网格不会在列下拉过滤器列表中创建可能的过滤器项目的列表。但是,您可以在列的 OnGetFilterDisplayText 或 OnGetFilterValues 事件或数据控制器的 OnGetValueList 事件中自行实现此操作。请参阅 ExpressQuantumGrid 的文档以获取有关这些事件以及如何使用它们的更多信息。

但我不知道该怎么做,因为我找不到这些文档。任何帮助将不胜感激

delphi devexpress delphi-2010 tcxgrid
2个回答
3
投票

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;

设置

DataController
Filter.AutoDataSetFilter
会导致底层
TDataSet.Filter
属性自动填充相应的条件。例如:

ShowMessage(cxGrid1DBTableView1.DataController.DataSet.Filter);

((MYFIELD = '值 A') OR (MYFIELD = '值 B'))

这显然取决于您使用的

TDataSet
的后代类在
Filter
的属性更改时如何反应。

如果您需要更多灵活性,可以使用

DataController.Filter.OnBeforeChange
DataController.Filter.OnChanged
事件处理程序。


0
投票

谢谢!!!你帮了我!!我需要禁用网格模式来解决我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.