I want to be capable to filter the records loaded in my TcxGrid
component, I have GridMode
because the grid is kinda slow to show the records on my application form, but this mode doesn't let me use the filters of the column (just the default ones).
I found this on the oficial forums:
Filtering can be implemented by setting the Data Controller's Filter.AutoDataSetFilter property value to True. This way, the filter expression will be automatically applied to the underlying dataset. In the meantime, please note that the Grid working in Grid mode, does not create a list of the possible filter items in the column dropdown filter list. However, you may implement this yourself within the column's OnGetFilterDisplayText or OnGetFilterValues events or the Data Controller's OnGetValueList event. Please refer to the ExpressQuantumGrid's documentation to get more information about these events and how to use them.
But I can't figure out how to do that, since I can't find those documentation. Any help will be appreciated
DevExpress has a great support team, contact them if you need help with their products.
Anyhow, broadly, it works as follows:
You can freely add values by code using the column's OnGetFilterValues
event:
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;
Setting the DataController
's Filter.AutoDataSetFilter
causes the underlying TDataSet.Filter
property to be automatically filled with the corresponding condition. For example:
ShowMessage(cxGrid1DBTableView1.DataController.DataSet.Filter);
((MYFIELD = 'Value A') OR (MYFIELD = 'Value B'))
It obviously depends on how the TDataSet
's descendant class you're using reacts when the Filter
's property changes.
If you need more flexibility, you can use the DataController.Filter.OnBeforeChange
or the DataController.Filter.OnChanged
event handlers.