如何取消selectDataGridView控件中的所有选定的行?

我想在用户单击控件的空白(非行)部分时取消selectDataGridView控件中的所有选定行。
我怎样才能做到这一点?

要取消selectDataGridView所有行和单元格,可以使用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(eX, eY) = DataGridView.HitTestInfo.Nowhere Then myDataGridView.ClearSelection() myDataGridView.CurrentCell = Nothing End If End If End Sub 

当然,您也可以inheritance现有的DataGridView控件,将所有这些function组合到一个自定义控件中。 您需要重写其OnMouseUp方法,类似于上面显示的方式。 我也想提供一个方便的公共DeselectAll方法,它们都调用ClearSelection方法并将CurrentCell属性设置为Nothing

(代码示例在VB.NET中都是任意的,因为如果这不是你的本地方言,问题没有指定一种语言 – 道歉。)

感谢科迪inheritance人的C#的ref:

 if (e.Button == System.Windows.Forms.MouseButtons.Left) { DataGridView.HitTestInfo hit = dgv_track.HitTest(eX, eY); if (hit.Type == DataGridViewHitTestType.None) { dgv_track.ClearSelection(); dgv_track.CurrentCell = null; } } 

 dgv.CurrentCell = null; 

当用户点击dgv的空白部分时。

我发现为什么我的第一行是默认select,并发现如何不select默认情况下。

默认情况下,我的datagridview是我的Windows窗体上的第一个制表位的对象。 使制表首先停在另一个对象上(也许禁用datagrid的tabstop将起作用)禁用select第一行

我遇到了同样的问题,并find了一个解决scheme(不完全由我自己,但有互联网)

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

这是一个小窍门,你可以看到一行的唯一方法是select,是由第一列(不是列[0],但是因此)。 当你点击另一行时,你将不会再看到蓝色的select,只有箭头指示哪一行已被选中。 据了解,我在我的gridview中使用rowSelection。

在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(eX, eY), DataGridView.HitTestInfo.Nowhere) Then dgv.ClearSelection() dgv.CurrentCell = Nothing End If End If End Sub