Я хочу отменить выделение всех выбранных строк в элементе управления DataGridView
, когда пользователь нажимает на пустую (нестрочную) часть элемента управления.
Как я могу это сделать?
Как отменить выбор всех выбранных строк в элементе управления DataGridView?
Ответ 1
Чтобы отменить выбор всех строк и ячеек в DataGridView
, вы можете использовать метод ClearSelection
:
myDataGridView.ClearSelection()
Если вы не хотите, чтобы даже первая строка/ячейка была выбрана, вы можете установить свойство CurrentCell
Nothing
/null
, который временно скроет прямоугольник фокуса, пока элемент управления снова не получит фокус:
myDataGridView.CurrentCell = Nothing
Чтобы определить, когда пользователь нажал на пустую часть DataGridView
, вам нужно обработать событие MouseUp
. В этом случае вы можете HitTest
указать местоположение клика и следить за этим, чтобы указать HitTestInfo.Nowhere
. Например:
Private Sub myDataGridView_MouseUp(ByVal sender as Object, ByVal e as System.Windows.Forms.MouseEventArgs)
''# See if the left mouse button was clicked
If e.Button = MouseButtons.Left Then
''# Check the HitTest information for this click location
If myDataGridView.HitTest(e.X, e.Y) = DataGridView.HitTestInfo.Nowhere Then
myDataGridView.ClearSelection()
myDataGridView.CurrentCell = Nothing
End If
End If
End Sub
Конечно, вы можете также подклассифицировать существующий элемент управления DataGridView
, чтобы объединить все эти функции в один настраиваемый элемент управления. Вам необходимо переопределить метод OnMouseUp
, аналогичный показанному выше. Я также хотел бы предоставить общедоступный метод DeselectAll
для удобства, который вызывает метод ClearSelection
и устанавливает для свойства CurrentCell
значение Nothing
.
(Образцы кода произвольны в VB.NET, потому что вопрос не указывает извинения за язык, если это не ваш родной диалект.)
Ответ 2
Спасибо Cody heres С# для ссылки:
if (e.Button == System.Windows.Forms.MouseButtons.Left)
{
DataGridView.HitTestInfo hit = dgv_track.HitTest(e.X, e.Y);
if (hit.Type == DataGridViewHitTestType.None)
{
dgv_track.ClearSelection();
dgv_track.CurrentCell = null;
}
}
Ответ 3
Set
dgv.CurrentCell = null;
когда пользователь нажимает на пустую часть dgv.
Ответ 4
Я узнал, почему моя первая строка была выбрана по умолчанию, и выяснил, как ее не выбрать по умолчанию.
По умолчанию мой datagridview был объектом с первой вкладкой-остановкой в моей форме окна. Перенести вкладку сначала на другой объект (возможно, отключить tabstop для datagrid вообще будет работать) отключить выбор первой строки
Ответ 5
Я столкнулся с той же проблемой и нашел решение (не полностью сам, но есть интернет)
Color blue = ColorTranslator.FromHtml("#CCFFFF");
Color red = ColorTranslator.FromHtml("#FFCCFF");
Color letters = Color.Black;
foreach (DataGridViewRow r in datagridIncome.Rows)
{
if (r.Cells[5].Value.ToString().Contains("1")) {
r.DefaultCellStyle.BackColor = blue;
r.DefaultCellStyle.SelectionBackColor = blue;
r.DefaultCellStyle.SelectionForeColor = letters;
}
else {
r.DefaultCellStyle.BackColor = red;
r.DefaultCellStyle.SelectionBackColor = red;
r.DefaultCellStyle.SelectionForeColor = letters;
}
}
Это небольшой трюк, единственный способ, которым вы можете видеть, что строка выбрана, - это самый первый столбец (а не столбец [0], но один из них). Когда вы нажимаете другую строку, вы больше не увидите синий выбор, только стрелка указывает, какая строка выбрана. Как вы понимаете, я использую rowSelection в моем gridview.
Ответ 6
В VB.net используйте для Sub:
Private Sub dgv_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles dgv.MouseUp
' deselezionare se click su vuoto
If e.Button = MouseButtons.Left Then
' Check the HitTest information for this click location
If Equals(dgv.HitTest(e.X, e.Y), DataGridView.HitTestInfo.Nowhere) Then
dgv.ClearSelection()
dgv.CurrentCell = Nothing
End If
End If
End Sub