如何取消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