2010-10-13 89 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(); 

     } 
    }