2010-10-13 25 views
8

Używam vb.net i DataGridView na winform.Kliknij dwukrotnie wiersz DataGridView?

Po dwukrotnym kliknięciu przez użytkownika wiersza chcę coś zrobić z tym wierszem. Ale skąd mogę wiedzieć, czy użytkownik kliknął wiersz lub tylko w dowolnym miejscu siatki? Jeśli używam DataGridView.CurrentRow, to jeśli wybrano wiersz i użytkownik kliknął gdziekolwiek na siatce, bieżący wiersz będzie pokazywał wybrane, a nie miejsce, w którym użytkownik kliknął (w tym przypadku nie byłby to wiersz i chciałbym go zignorować).

Odpowiedz

24

Spróbuj zdarzenie 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 

Będzie to tylko ogień, jeśli użytkownik jest rzeczywiście na komórki w siatce. Test If odfiltrowuje podwójne kliknięcia na selektory i nagłówki wierszy.

+0

Warto zauważyć, że możesz użyć 'e.RowIndex == -1', jeśli chcesz uruchomić coś, jeśli nie kliknąłeś wiersza – Luke

0

Chciałbym użyć zdarzenia DoubleClick z DataGridView. Będzie to działało co najmniej tylko wtedy, gdy użytkownik kliknie dwukrotnie w siatkę danych - możesz użyć pozycji MousePosition, aby określić, który wiersz (jeśli jest) dwukrotnie kliknął użytkownika.

+0

Używam DoubleClick z DataGridView. Ale w jaki sposób mogę użyć moustposition do wnioskowania, czy podwójne kliknięcie znajdowało się w rzeczywistym wierszu? – Alex

0

Możesz spróbować czegoś takiego.

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 

Należy pamiętać, że nie mogłem tego przetestować, ponieważ nie miałem żadnych danych do zapełnienia mojego DataGridView.

0

Można spróbować to:

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

Zastosowanie Datagridview DoubleClick Evenet a następnie Datagrdiview1.selectedrows [0] .Cell [ "nazwa_komórki"], aby uzyskać wartość i proces.

W poniższym przykładzie przedstawiono rejestr klientów po dwukrotnym kliknięciu wybranego wiersza.

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

     } 
    } 
Powiązane problemy