New to Telerik UI for WinFormsStart a free 30-day trial

How to create column chooser in VirtualGrid

Updated over 6 months ago

Environment

Product VersionProductAuthor
2022.2.622RadVirtualGrid for WinFormsDinko 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.

virtualgrid-column-chooser

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));
    }
}

       
In this article
EnvironmentDescriptionSolution
Not finding the help you need?
Contact Support