New to Telerik UI for WinForms? Start a free 30-day trial
How to create column chooser in VirtualGrid
Updated over 6 months ago
Environment
| Product Version | Product | Author |
|---|---|---|
| 2022.2.622 | RadVirtualGrid for WinForms | Dinko Krastev |
Description
RadVirtualGrid is a control providing a convenient UI to display only the visible part of a large set of data. By definition, not all of that data needs to be visually available. This article aims to show you how to show/hide columns in RadVirtualGrid depending on the user requirements.
Solution
In this example, we will demonstrate how to use RadCheckedListBox to list all columns in the RadVirtualGrid. Then using the checkbox on each item we can show/hide columns in the RadVirtualGrid control.

C#
public partial class RadForm1 : Telerik.WinControls.UI.RadForm
{
DataTable data;
List<string> visibleColumns = new List<string>();
List<string> columnNames = new List<string>();
public RadForm1()
{
InitializeComponent();
data = GetTable();
for (int i = 0; i < 10; i++)
{
string name = "Column " + i;
radCheckedListBox1.Items.Add(name);
this.visibleColumns.Add(name);
this.columnNames.Add(name);
}
foreach (var item in radCheckedListBox1.Items)
{
item.CheckState = Telerik.WinControls.Enumerations.ToggleState.On;
}
radCheckedListBox1.ItemCheckedChanged += RadCheckedListBox1_ItemCheckedChanged;
radVirtualGrid1.CellValueNeeded += RadVirtualGrid1_CellValueNeeded;
radVirtualGrid1.RowCount = data.Rows.Count;
radVirtualGrid1.ColumnCount = radCheckedListBox1.CheckedItems.Count;
radVirtualGrid1.AutoSizeColumnsMode = VirtualGridAutoSizeColumnsMode.Fill;
}
private void RadVirtualGrid1_CellValueNeeded(object sender, Telerik.WinControls.UI.VirtualGridCellValueNeededEventArgs e)
{
if (e.ColumnIndex < 0 || e.ColumnIndex >= radVirtualGrid1.ColumnCount) return;
if (e.RowIndex == RadVirtualGrid.HeaderRowIndex)
{
e.Value = data.Columns[this.visibleColumns[e.ColumnIndex]];
}
if (e.RowIndex < 0)
{
return;
}
var row = data.Rows[e.RowIndex];
e.Value = row[this.visibleColumns[e.ColumnIndex]];
}
private void RadCheckedListBox1_ItemCheckedChanged(object sender, Telerik.WinControls.UI.ListViewItemEventArgs e)
{
if (e.Item.CheckState == Telerik.WinControls.Enumerations.ToggleState.Off)
{
this.visibleColumns.Remove(e.Item.Text);
this.radVirtualGrid1.ColumnCount = 0;
this.radVirtualGrid1.ColumnCount = this.visibleColumns.Count;
}
else
{
this.visibleColumns.Add(e.Item.Text);
this.visibleColumns.Sort(new ColumnNamesComparer(this.columnNames));
}
radVirtualGrid1.ColumnCount = this.visibleColumns.Count;
}
static DataTable GetTable()
{
DataTable table = new DataTable();
for (int i = 0; i < 10; i++)
{
table.Columns.Add("Column " + i, typeof(int));
}
for (int i = 0; i < 100; i++)
{
table.Rows.Add(new object[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 });
}
return table;
}
}
public class ColumnNamesComparer : IComparer<string>
{
public List<string> columnOrder;
public ColumnNamesComparer(List<string> order)
{
this.columnOrder = order;
}
public int Compare(string x, string y)
{
return this.columnOrder.IndexOf(x).CompareTo(this.columnOrder.IndexOf(y));
}
}