es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Modo de edición del DataGridView – Forzar edición de celda – No funciona solo estableciendo CurrentCell y Focus.

En mi DataGridView (no vinculado), algunas celdas son editables y otras no lo son. Cuando hago clic en una celda editable, la atención se dirige allí y puedo escribir cualquier cosa. Luego, si pulso la tecla TAB, la atención se dirige a la siguiente celda. Pero si el valor introducido no es válido, puedo comprobarlo desde el evento Grid_CellValidating y cancelar el cambio usando e.Cancel = True. Si lo hago, la atención permanece en la misma celda esperando un valor válido, en lugar de cambiar la celda actual.

Hasta aquí, todo funciona como se esperaba.

Lo que necesito ahora es, desde una nueva ventana modal donde pueda seleccionar un valor, establecer este valor en una celda de la cuadrícula en el formulario principal y cerrar la ventana modal.

Esto funciona, pero no solo quiero establecer el valor en la celda. También quiero establecer la celda en “modo de edición”. Me refiero al estado en el que el contenido de la celda está seleccionado y si intentas cambiar el valor, el evento Grid_CellValidating se dispara y si el valor no es válido, la lógica en el evento Grid_CellValidating puede comprobarlo para decidir si es válido o no…

No tuve éxito con eso.

Este es el código que estoy intentando usar para hacer que funcione.

myGrid.Rows(myGrid.Rows.Count – 1).Cells(“EID”).Value = 1
myGrid.Focus()
myGrid.CurrentCell = myGrid(“EID”, myGrid.Rows.Count – 1)
myGrid.BeginEdit(True)

Pero esto definitivamente no funciona.

De hecho, la atención ni siquiera está en la cuadrícula. Puedo ver el valor 1 en la celda pero la atención no está allí. Por ejemplo, si pulso la tecla TAB, puedo ver que la atención está en otro control, no en la cuadrícula.

Lo que espero es: Si el valor 1 no es válido, el evento CellValidating se activa y hace el trabajo…

¿Sabe qué debo hacer para obtener el comportamiento que necesito?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para establecer una celda en modo de edición después de establecer su valor desde una ventana modal, puede utilizar el siguiente código:

    “`vb.net
    ‘ Establecer el valor de la celda
    myGrid.Rows(myGrid.Rows.Count – 1).Cells(“EID”).Value = 1

    ‘ Obtener el índice de la celda actual
    Dim rowIndex As Integer = myGrid.Rows.Count – 1
    Dim columnIndex As Integer = myGrid.Columns(“EID”).Index

    ‘ Establecer el foco en la celda y comenzar la edición
    myGrid.CurrentCell = myGrid(columnIndex, rowIndex)
    myGrid.BeginEdit(True)
    “`

    Esto establecerá el valor de la celda, establecerá el foco en la celda y comenzará la edición. El método BeginEdit(True) pondrá la celda en modo de edición y seleccionará su contenido, como cuando se hace clic en una celda editable en la cuadrícula.

    Asegúrese de que la cuadrícula tenga foco antes de llamar a este código, de lo contrario, la propiedad CurrentCell no se establecerá correctamente. Puede utilizar el método myGrid.Focus() para establecer el foco en la cuadrícula antes de establecer el valor de la celda y comenzar la edición.

Comments are closed.