Enunciado
Imagina un gridview con varias filas. Haces click con el botón derecho y se despliega un menú contextual con opciones editar, borrar,...etc.Quieres que si eliges editar se abra una ventana para editar la fila sobre la que estas pinchando.
El problema es que las propiedades currentRow y SelectedRows no corresponden a la fila que pinchas.
Solución
Hay que interceptar el evento mousedown para cambiar la selección a la fila debajo del pincho del ratón. Private Sub gvContactos_clickContexto(sender As Object, e As MouseEventArgs) Handles gvContactos.MouseDown
Dim hti = gvContactos.HitTest(e.X, e.Y)
If (hti.Type = DataGridViewHitTestType.Cell) Or (hti.Type = DataGridViewHitTestType.RowHeader) Then
gvContactos.ClearSelection()
gvContactos.Rows(hti.RowIndex).Selected = True
End If
End Sub
Private Sub gvContactos_EditarActiv(sender As Object, e As System.EventArgs) Handles gvContactos.DoubleClick,
btnEditaActivContacto.Click,
btnCtxEditActivCto.Click
If gvContactos.SelectedRows.Count = 1 Then editaActivContacto(CType(gvContactos.SelectedRows(0).DataBoundItem, tblFbContacto))
End Sub
Private Sub gvcontactoEdita_Click(sender As Object, e As System.EventArgs) Handles btnEditaContacto.Click,
btnCtxEditarContacto.Click
If gvContactos.SelectedRows.Count = 1 Then
editaContacto(CType(gvContactos.SelectedRows(0).DataBoundItem, tblFbContacto))
End If
End Sub
Algunos ejemplos que he visto comprueban si se ha pulsado el botón derecho o el izquierdo en el argumento del evento mousedown. En mi caso no lo hago porque en cualquier caso quiero reducir la selección a una fila.
No hay comentarios:
Publicar un comentario