2010-10-13 55 views
8

Estoy usando vb.net y DataGridView en un winform.Haga doble clic en la fila DataGridView?

Cuando un usuario hace doble clic en una fila, quiero hacer algo con esta fila. Pero, ¿cómo puedo saber si el usuario hizo clic en una fila o en cualquier lugar de la cuadrícula? Si utilizo DataGridView.CurrentRow, si se selecciona una fila y el usuario hace clic en cualquier parte de la cuadrícula, la fila actual mostrará el seleccionado y no el lugar donde el usuario hizo clic (que en este caso no estaría en una fila y quisiera ignorarlo).

Respuesta

24

Trata el caso 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 

Esto sólo se disparará si el usuario es en realidad más de una celda de la cuadrícula. La comprobación If filtra los clics dobles en los selectores de fila y en los encabezados.

+0

Merece la pena señalar que puede usar 'e.RowIndex == -1' si desea ejecutar algo si no hizo clic en una fila – Luke

0

Usaría el evento DoubleClick del DataGridView. Al menos, esto se activará cuando el usuario haga doble clic en la cuadrícula de datos; puede usar MousePosition para determinar en qué fila (si la hay) el usuario hizo doble clic.

+0

estoy usando el de DoubleClick del DataGridView. Pero, ¿cómo puedo usar la moustposition para inferir si el doble clic estaba en una fila real? – Alex

0

Puede intentar algo como esto.

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 

Ten en cuenta que no podía probar esto porque diddent tengo ningún dato para poblar mi DataGridView.

0

Puede probar esto:

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

Uso Datagridview DoubleClick Evenet y luego Datagrdiview1.selectedrows [0] .cell [ "cellName"] para obtener el valor y el proceso.

El siguiente ejemplo muestra los registros de los clientes al hacer doble clic en la fila seleccionada.

private void (object sender, EventArgs e) {dgvClientsUsage_DoubleClick

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

     } 
    } 
Cuestiones relacionadas