New to Telerik UI for WinForms? Download free 30-day trial

Column Selection in RadGridView


Product Version Product Author
2019.1.219 RadGridView for WinForms Desislava Yordanova


This article demonstrates how to achieve column selection in RadGridView. For this purpose, it is necessary to keep the Shift key pressed and click the column's header. As a result all cells, belonging to this column, will be selected.



Create a derivative of the BaseGridBehavior class. Override its OnMouseDown method where, if the Shift key is pressed and the header cell element is clicked, you should iterate all rows and select programmatically the cells belonging to the clicked column.

When selecting multiple cells in RadGridView note that the selection should be wrapped in a MasterTemplate.SelectedCells.BeginUpdate - MasterTemplate.SelectedCells.EndUpdate block. Thus, the refresh operation will be done only once at the end of the operation but not with each selected cell.

Column selection

        public RadForm1()
            radGridView1.MultiSelect = true;
            radGridView1.SelectionMode = GridViewSelectionMode.CellSelect;
            this.radGridView1.GridViewElement.GridBehavior = new CustomGridBehavior();

        private class CustomGridBehavior : Telerik.WinControls.UI.BaseGridBehavior
            private bool isShiftPressed = false;

            public bool IsShiftPressed
                    return isShiftPressed;
                    isShiftPressed = value;

            private SortDescriptorCollection currentSortDescriptors;

            public override bool ProcessKeyDown(KeyEventArgs keys)
                isShiftPressed = (keys.Modifiers & Keys.Shift) == keys.Modifiers;

                return base.ProcessKeyDown(keys);

            public override bool ProcessKeyUp(KeyEventArgs keys)
                if (isShiftPressed)
                    isShiftPressed = false;

                return base.ProcessKeyUp(keys);

            public override bool OnMouseDown(MouseEventArgs e)
                var cellHeaderElement = this.GridControl.ElementTree.GetElementAtPoint(e.Location) as GridHeaderCellElement;

                if (cellHeaderElement != null && isShiftPressed)
                    foreach (var row in this.GridControl.Rows)
                        row.Cells[cellHeaderElement.ColumnIndex].IsSelected = true;

                    return true;
                    return base.OnMouseDown(e);

    Public Sub New()
        RadGridView1.MultiSelect = True
        RadGridView1.SelectionMode = GridViewSelectionMode.CellSelect
        Me.RadGridView1.GridViewElement.GridBehavior = New CustomGridBehavior()
    End Sub

    Private Class CustomGridBehavior
    Inherits Telerik.WinControls.UI.BaseGridBehavior

        Private _isShiftPressed As Boolean = False

        Public Property IsShiftPressed As Boolean
                Return _isShiftPressed
            End Get
            Set(ByVal value As Boolean)
                _isShiftPressed = value
            End Set
        End Property

        Private currentSortDescriptors As SortDescriptorCollection

        Public Overrides Function ProcessKeyDown(ByVal keys As KeyEventArgs) As Boolean
            IsShiftPressed = (keys.Modifiers And keys.Shift) = keys.Modifiers
            Return MyBase.ProcessKeyDown(keys)
        End Function

        Public Overrides Function ProcessKeyUp(ByVal keys As KeyEventArgs) As Boolean
            If IsShiftPressed Then
                IsShiftPressed = False
            End If

            Return MyBase.ProcessKeyUp(keys)
        End Function

        Public Overrides Function OnMouseDown(ByVal e As MouseEventArgs) As Boolean
            Dim cellHeaderElement = TryCast(Me.GridControl.ElementTree.GetElementAtPoint(e.Location), GridHeaderCellElement)

            If cellHeaderElement IsNot Nothing AndAlso isShiftPressed Then

                For Each row In Me.GridControl.Rows
                    row.Cells(cellHeaderElement.ColumnIndex).IsSelected = True

                Return True
                Return MyBase.OnMouseDown(e)
            End If
        End Function
    End Class

In this article
Not finding the help you need? Improve this article