2010-10-13 86 views
8

我在一个winform上使用vb.net和DataGridView。双击DataGridView行?

当用户双击某一行时,我想对该行执行某些操作。但是我怎么知道用户是否点击了一行或者只是在网格的任何地方?如果我使用DataGridView.CurrentRow,那么如果选择一行并且用户在网格上的任何地方点击,则当前行将显示选择的而不是用户点击的位置(在这种情况下,它不在一行上,我想忽略它)。

回答

24

尝试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检查过滤掉行选择器和标题上的双击。

+0

值得注意的是,如果你想运行一些东西,如果你没有点击某行,你可以使用'e.RowIndex == -1' – Luke 2014-08-14 13:47:48

0

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

+0

我使用的DataGridView的的DoubleClick。但是,如何使用moustposition来推断双击是否在实际行上? – Alex 2010-10-13 04:38:50

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 

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

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 
3

使用的DataGridView的DoubleClick Evenet然后Datagrdiview1.selectedrows [0]。细胞[ “单元名”]中获取价值和过程。

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

私人无效dgvClientsUsage_DoubleClick(对象发件人,EventArgs的) {

 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(); 

     } 
    }