To reproduce: use the following code snippet and refer to the attached gif file: public Form1() { InitializeComponent(); for (int i = 0; i < 20; i++) { this.radGridView1.Columns.Add("Col" + i); } for (int i = 0; i < 10; i++) { GridViewDataRowInfo row = this.radGridView1.Rows.AddNew() as GridViewDataRowInfo; foreach (GridViewColumn col in this.radGridView1.Columns) { row.Cells[col.Name].Value = "Data" + row.Index + "." + col.Index; } } this.radGridView1.MultiSelect = true; this.radGridView1.SelectionMode = GridViewSelectionMode.CellSelect; } Workaround: int startColumn = int.MaxValue; int endColumn = 0; int startRow = int.MaxValue; int endRow = 0; private void radGridView1_MouseDown(object sender, MouseEventArgs e) { GridDataCellElement cellElement = this.radGridView1.ElementTree.GetElementAtPoint(e.Location) as GridDataCellElement; if (cellElement != null) { startColumn = cellElement.ColumnIndex; startRow = cellElement.RowIndex; } } private void radGridView1_MouseUp(object sender, MouseEventArgs e) { GridDataCellElement cellElement = this.radGridView1.ElementTree.GetElementAtPoint(e.Location) as GridDataCellElement; if (cellElement != null) { endColumn = cellElement.ColumnIndex; endRow = cellElement.RowIndex; } if (endColumn < startColumn) { int swap = endColumn; endColumn = startColumn; startColumn = swap; } if (endRow < startRow) { int swap = endRow; endRow = startRow; startRow = swap; } this.radGridView1.ClearSelection(); int scrollBarValue = this.radGridView1.TableElement.HScrollBar.Value; this.radGridView1.BeginUpdate(); for (int i = startRow; i < endRow + 1; i++) { for (int j = startColumn; j < endColumn + 1; j++) { if (!this.radGridView1.Rows[i].Cells[j].IsSelected) { this.radGridView1.Rows[i].Cells[j].IsSelected = true; } } } this.radGridView1.EndUpdate(); this.radGridView1.TableElement.HScrollBar.Value = scrollBarValue; }