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 SubAlgunos 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