Customizing Filter Text for Enum and Bool Columns in RadGridView
Environment
| Product Version | Product | Author |
|---|---|---|
| 2025.2.520 | RadGridView for WinForms | Dinko Krastev |
Description
I want to customize the automatic filter menu in RadGridView for WinForms in two ways:
- For columns of type
bool, replace "True" and "False" with "Checked" and "Unchecked". - For columns of type
enum, display the text from their[Description]attribute instead of the raw enum names.
Solution
To achieve this customization, handle the FilterPopupInitialized event of RadGridView and modify the text in the filter menu using the RadTreeView.NodeFormatting event. Below is the implementation:
Customizing Bool Column Filter Text
Use the following code:
this.radGridView1.FilterPopupInitialized += RadGridView1_FilterPopupInitialized;
private void RadGridView1_FilterPopupInitialized(object sender, FilterPopupInitializedEventArgs e)
{
if (e.Column.Name == "boolColumn") // Replace with your column name
{
RadListFilterPopup radListFilterPopup = e.FilterPopup as RadListFilterPopup;
if (radListFilterPopup != null)
{
radListFilterPopup.MenuTreeElement.TreeView.NodeFormatting -= BoolFormattingHandler;
radListFilterPopup.MenuTreeElement.TreeView.NodeFormatting += BoolFormattingHandler;
radListFilterPopup.MenuTreeElement.TreeView.Refresh();
}
}
}
private void BoolFormattingHandler(object sender, TreeNodeFormattingEventArgs e)
{
if (e.Node.Text == "False")
e.NodeElement.ContentElement.Text = "Unchecked";
else if (e.Node.Text == "True")
e.NodeElement.ContentElement.Text = "Checked";
}
Customizing Enum Column Filter Text
For enum values with [Description] attributes, use the following code:
this.radGridView1.FilterPopupInitialized += RadGridView1_FilterPopupInitialized;
private void RadGridView1_FilterPopupInitialized(object sender, FilterPopupInitializedEventArgs e)
{
if (e.Column.Name == "enumColumn") // Replace with your column name
{
RadListFilterPopup radListFilterPopup = e.FilterPopup as RadListFilterPopup;
if (radListFilterPopup != null)
{
radListFilterPopup.MenuTreeElement.TreeView.NodeFormatting -= EnumFormattingHandler;
radListFilterPopup.MenuTreeElement.TreeView.NodeFormatting += EnumFormattingHandler;
radListFilterPopup.MenuTreeElement.TreeView.Refresh();
}
}
}
private void EnumFormattingHandler(object sender, TreeNodeFormattingEventArgs e)
{
string description = GetEnumDescription(e.Node.Text);
if (!string.IsNullOrEmpty(description))
e.NodeElement.ContentElement.Text = description;
}
private string GetEnumDescription(string enumName)
{
// Replace YourEnumType with the actual enum type
var fieldInfo = typeof(YourEnumType).GetField(enumName);
var attributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
return attributes.Length > 0 ? attributes[0].Description : enumName;
}