New to Telerik UI for WinForms? Start a free 30-day trial
How to Use RadPopupEditor as a Custom Editor in RadGridView
Updated over 6 months ago
Environment
| Product Version | Product | Author |
|---|---|---|
| 2021.3.119 | RadGridView for WinForms | Desislava Yordanova |
Description
This tutorial demonstrates a sample approach how to create a custom editor in RadGridView that uses a RadPopupEditor hosting a grid. Typing into the editable part of RadPopupEditor filters the popup grid:

This approach can be used to optimize the performance when filtering GridViewMultiComboBoxColumn.
Solution
Create a derivative of BaseGridEditor and add a RadPopupEditor and RadPopupContainer in its CreateEditorElement method. Note that the container can host any control that you need.
C#
private void radGridView1_EditorRequired(object sender, EditorRequiredEventArgs e)
{
if (this.radGridView1.CurrentColumn.Name == "Description")
{
MyEditor editor = new MyEditor();
GridViewMultiComboBoxColumn mccbCol = this.radGridView1.CurrentColumn as GridViewMultiComboBoxColumn;
editor.DataSource = mccbCol.DataSource;
editor.DisplayMember = mccbCol.DisplayMember;
e.Editor = editor;
}
}
public class MyEditor : BaseGridEditor
{
public string DisplayMember { get; set; }
public object DataSource
{
get
{
{
return this.grid.DataSource;
}
}
set
{
this.grid.DataSource = value;
}
}
public override void BeginEdit()
{
base.BeginEdit();
this.popupEditor.TextBoxElement.TextBoxItem.TextBoxControl.Focus();
}
public override object Value
{
get
{
if (grid.CurrentRow != null)
{
return this.grid.CurrentRow.Cells[this.DisplayMember].Value;
}
return null;
}
set
{
if (value != null)
{
foreach (GridViewRowInfo row in grid.Rows)
{
if (row.Cells[this.DisplayMember].Value == value)
{
grid.CurrentRow = row;
break;
}
}
}
}
}
RadGridView grid = new RadGridView();
RadPopupEditor popupEditor = new RadPopupEditor();
RadPopupContainer container = new RadPopupContainer();
protected override RadElement CreateEditorElement()
{
popupEditor.AssociatedControl = container;
popupEditor.DropDownStyle = RadDropDownStyle.DropDown;
container.Controls.Add(grid);
grid.Dock = DockStyle.Fill;
grid.EnableFiltering = true;
grid.ShowFilteringRow = false;
grid.ReadOnly = true;
grid.EnableCustomFiltering = true;
grid.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
grid.CustomFiltering += grid_CustomFiltering;
this.popupEditor.TextBoxElement.TextChanged += popupEditor_TextChanged;
RadHostItem item = new RadHostItem(popupEditor);
return item;
}
private void popupEditor_TextChanged(object sender, EventArgs e)
{
grid.MasterTemplate.Refresh();
popupEditor.PopupEditorElement.ShowPopup();
this.popupEditor.PopupEditorElement.TextBoxElement.TextBoxItem.TextBoxControl.Focus();
}
private void grid_CustomFiltering(object sender, GridViewCustomFilteringEventArgs e)
{
string searchText = popupEditor.Text;
if (searchText != null && searchText != string.Empty)
{
DataRowView rowView = e.Row.DataBoundItem as DataRowView;
e.Handled = true;
e.Visible = rowView.Row[this.DisplayMember].ToString().Contains(searchText);
}
else
{
e.Handled = false;
}
}
}