双击DataGridView行?

时间:2010-10-13 02:11:10

标签: vb.net winforms datagridview double-click

我在winform上使用vb.net和DataGridView。

当用户双击某行时,我想对此行执行某些操作。但是,如何知道用户是单击某行还是仅在网格中的任何位置?如果我使用DataGridView.CurrentRow,那么如果选择了一行并且用户点击了网格上的任何位置,则当前行将显示所选的而不是用户点击的位置(在这种情况下,它不会在一行上,我希望忽略它。)

6 个答案:

答案 0 :(得分:25)

尝试CellMouseDoubleClick事件......

Private Sub DataGridView1_CellMouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles DataGridView1.CellMouseDoubleClick
    If e.RowIndex >= 0 AndAlso e.ColumnIndex >= 0 Then
        Dim selectedRow = DataGridView1.Rows(e.RowIndex)
    End If
End Sub

仅当用户实际位于网格中的单元格上时才会触发。 If检查过滤了行选择器和标题的双击。

答案 1 :(得分:3)

使用Datagridview DoubleClick Evenet,然后使用Datagrdiview1.selectedrows [0] .cell [“CellName”]获取价值和流程。

下面的示例显示了双击所选行时客户端的记录。

private void dgvClientsUsage_DoubleClick(object sender,EventArgs e)         {

        if (dgvClientsUsage.SelectedRows.Count < 1)
        {
            MessageBox.Show("Please select a client");
            return;
        }

        else
        {
            string clientName = dgvClientsUsage.SelectedRows[0].Cells["ClientName"].Value.ToString();

            // show selected client Details
            ClientDetails clients = new ClientDetails(clientName);
            clients.ShowDialog();

        }
    }

答案 2 :(得分:2)

在双击处理程序中使用DataGridView.HitTest以找出点击发生的位置。

答案 3 :(得分:0)

我会使用DoubleClickDataGridView事件。这将至少仅在用户双击数据网格时触发 - 您可以使用MousePosition确定用户双击的行(如果有)。

答案 4 :(得分:0)

你可以尝试这样的事情。

Private Sub DataGridView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGridView1.DoubleClick
    For index As Integer = 0 To DataGridView1.Rows.Count
        If DataGridView1.Rows(index).Selected = True Then
            'it is selected
        Else
            'is is not selected
        End If
    Next
End Sub

请记住,我无法测试这个因为我没有任何数据来填充我的DataGridView。

答案 5 :(得分:0)

你可以试试这个:

Private Sub grdview_CellDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grdview.CellDoubleClick

    For index As Integer = 0 To grdview.Rows.Count - 1

        If e.RowIndex = index AndAlso e.ColumnIndex = 1 AndAlso grdview.Rows(index).Cells(1).Value = "" Then

            MsgBox("Double Click Message")

        End If
    Next
End Sub