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

时间:2010-11-30 14:16:04

标签: .net winforms datagridview

当用户点击控件的空白(非行)部分时,我想取消选择DataGridView控件中的所有选定行。
我怎么能这样做?

6 个答案:

答案 0 :(得分:105)

要取消选择DataGridView中的所有行和单元格,您可以使用ClearSelection method

myDataGridView.ClearSelection()

如果您不希望第一行/单元格显示为已选中,则可以CurrentCell property设置为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 method,类似于上面显示的方式。我还想提供一个公共DeselectAll方法,方便调用ClearSelection方法并将CurrentCell属性设置为Nothing

(代码示例在VB.NET中都是任意的,因为如果这不是您的母语,问题没有指定语言道歉。)

答案 1 :(得分:6)

谢谢Cody继承了c#的参考:

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

答案 2 :(得分:1)

dgv.CurrentCell = null;

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

答案 3 :(得分:1)

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

默认情况下,我的datagridview是Windows窗体上第一个制表位的对象。使标签首先停在另一个对象上(可能会禁用数据网格的tabstop)将禁用选择第一行

答案 4 :(得分:0)

我遇到了同样的问题并找到了解决方案(不完全是我自己,但有互联网)

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],而是一列)。单击另一行时,您将不再看到蓝色选择,只有箭头指示选择了哪一行。如您所知,我在gridview中使用rowSelection。

答案 5 :(得分:0)

在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