New to Telerik UI for WinForms? Start a free 30-day trial
How to Use GridView Filter Row in RadMultiColumnCombobox
Updated over 1 year ago
Environment
| Product Version | Product | Author |
|---|---|---|
| 2021.2.511 | RadMultiColumnCombobox | Desislava Yordanova |
Description
This tutorial demonstrates a sample approach how to enable the filtering row in the popup grid and filter the records according to the user's input in the particular column.

Solution
Create an extension Filtering method for the RadMultiColumnComboBox. It enables the filtering row in the popup grid.
C#
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.customersTableAdapter.Fill(this.nwindDataSet.Customers);
this.radMultiColumnComboBox1.DataSource = this.customersBindingSource;
this.radMultiColumnComboBox1.DisplayMember = "ContactName";
this.radMultiColumnComboBox1.ValueMember = "CustomerID";
this.radMultiColumnComboBox1.AutoSizeDropDownToBestFit = true;
this.radMultiColumnComboBox1.AutoSizeDropDownColumnMode = BestFitColumnMode.AllCells;
this.radMultiColumnComboBox1.Filtering(true);
}
}
internal static class ExtensionsRadMultiColumnComboBox
{
public static void Filtering(this RadMultiColumnComboBox combo, bool enable)
{
if (enable)
{
if (!combo.EditorControl.EnableFiltering)
{
combo.DropDownClosing += RadMultiColumnComboBoxDropDownClosing;
var multiColumnComboBoxElement = combo.MultiColumnComboBoxElement;
multiColumnComboBoxElement.EditorControl.EnableFiltering = true;
multiColumnComboBoxElement.EditorControl.ShowFilteringRow = true;
multiColumnComboBoxElement.EditorControl.FilterChanging +=
RadMultiColumnComboBoxEditorControlFilterChanging;
}
}
else
{
if (combo.EditorControl.EnableFiltering)
{
combo.DropDownClosing -= RadMultiColumnComboBoxDropDownClosing;
var multiColumnComboBoxElement = combo.MultiColumnComboBoxElement;
multiColumnComboBoxElement.EditorControl.EnableFiltering = false;
multiColumnComboBoxElement.EditorControl.ShowFilteringRow = false;
multiColumnComboBoxElement.EditorControl.FilterChanging -=
RadMultiColumnComboBoxEditorControlFilterChanging;
}
}
}
private static void RadMultiColumnComboBoxEditorControlFilterChanging(object sender,
GridViewCollectionChangingEventArgs e)
{
var multiColumnComboGridView = sender as MultiColumnComboGridView;
if (multiColumnComboGridView == null)
return;
if (multiColumnComboGridView.Parent == null)
return;
var radPopupControlBase = multiColumnComboGridView.Parent as MultiColumnComboPopupForm;
if (radPopupControlBase == null)
return;
if (!radPopupControlBase.IsDisplayed)
return;
if (e.OldItems == null)
return;
if (e.OldItems.Count == 0)
return;
var filterDescriptor = e.OldItems[0] as FilterDescriptor;
if (filterDescriptor == null)
return;
var grid = multiColumnComboGridView;
var currentRow = grid.CurrentRow;
if (currentRow.RowElementType != typeof (GridFilterRowElement))
return;
var value = currentRow.Cells[filterDescriptor.PropertyName].Value ?? string.Empty;
if (value == null)
return;
string activeEditorString = null;
if (grid.ActiveEditor != null)
{
var activeEditorValue = grid.ActiveEditor.Value ?? string.Empty;
activeEditorString = activeEditorValue.ToString();
}
if (e.NewValue == null && value.ToString() != string.Empty &&
!(activeEditorString != null && activeEditorString == string.Empty &&
grid.CurrentColumn.Name == filterDescriptor.PropertyName))
e.Cancel = true;
}
private static void RadMultiColumnComboBoxDropDownClosing(object sender, RadPopupClosingEventArgs args)
{
var radMultiColumnComboBox = sender as RadMultiColumnComboBox;
if (radMultiColumnComboBox == null)
return;
var popupForm = radMultiColumnComboBox.MultiColumnComboBoxElement.PopupForm;
var editorControl = radMultiColumnComboBox.MultiColumnComboBoxElement.EditorControl;
MultiColumnComboBoxDropDownClosingHandler(popupForm, editorControl, args);
}
private static void MultiColumnComboBoxDropDownClosingHandler(RadPopupControlBase popupForm,
RadGridView editorControl, RadPopupClosingEventArgs args)
{
var mousePosition = Control.MousePosition;
var xIn = mousePosition.X >= popupForm.Location.X &&
mousePosition.X <= popupForm.Location.X + popupForm.Size.Width;
var yIn = mousePosition.Y >= popupForm.Location.Y &&
mousePosition.Y <= popupForm.Location.Y + popupForm.Size.Height;
if (editorControl.CurrentRow.Index == -1 && xIn && yIn)
{
args.Cancel = true;
}
else
{
if (editorControl.ActiveEditor != null)
{
editorControl.ActiveEditor.EndEdit();
}
editorControl.FilterChanging -= RadMultiColumnComboBoxEditorControlFilterChanging;
foreach (var column in editorControl.Columns)
{
column.FilterDescriptor = null;
}
editorControl.FilterChanging += RadMultiColumnComboBoxEditorControlFilterChanging;
}
}
}