miércoles, 1 de julio de 2020



Existen situaciones en las cuales no es posible llevar a cabo todas las tareas planeadas en un solo formulario, razón por la cual sería necesario continuar en un segundo formulario (o varios más según se necesite). Un ejemplo sería tener un formulario en el cual se visualicen los resultados de una consulta a una base de datos, luego, al seleccionar uno de estos datos, podría ser necesario ofrecer al usuario la posibilidad de editar algún dato de la consulta. Si los datos se muestran en un DataGridView podemos trasladar los datos de la fila a unos controles TextBox, editar y guardar (en el mismo formulario). Sin embargo, es posible y mejor pasar estos datos a otro formulario (lo cual da al programa una buena experiencia de usuario) y realizar la edición allí. 

Hay que tener en cuenta que el control DataGridView tiene un comportamiento similar a una hoja de Excel, así que en estos controles también se puede hacer una edición directamente sobre sus celdas. Queda a criterio de cada programador decidir que forma implementar. 

Para enviar datos de un formulario a otro tenemos dos opciones: 


USAR VARIABLES GLOBALES

Es posible crear una clase dentro del archivo Program.cs de la aplicación, luego, definir dentro de esta nueva clase unos campos (o variables) y usarlos desde cualquier formulario. El problema de esta solución es que los campos o variables serán visibles desde cualquier lugar del proyecto, incluyendo a formularios que no tengan nada que ver con la tarea específica a realizar por estas variables. En una aplicación muy grande, con muchas variables y campos, esto se puede volver confuso. Además, esto distorsiona un poco la razón por la cual la variable ha sido creada y su propósito. Por esta razón, usar variables globales es considerado una mala práctica. Aquí se mostrará un ejemplo para que uses variables globales y descubras por ti mismo que ocurre al usarlas sin la debida necesidad. 

Creamos una clase estática en el archivo Program.cs (Al ser estática podemos acceder a sus métodos y campos sin necesidad de instanciarla): 



Luego, para usar la variable es tan simple como: 



USAR PARAMETROS:

La segunda forma (y más recomendada) es pasar los datos entre formularios definiendo unos parámetros dentro del constructor de la clase del formulario que recibe los datos. 


Para ver en detalle esta forma de pasar datos, crearemos un ejemplo con un Form1 en el cual cargáremos unos datos en un DataGridView desde una base de datos. Al seleccionar una fila obtendremos el Id (o llave primaria) del registro seleccionado, y enviaremos este dato a un segundo formulario. En este segundo formulario cargaremos los datos del registro seleccionado usando el Id (o llave primaria) recibida por parámetro y los visualizaremos en los respectivos TextBoxes

1. Crear un Form1 con los controles DataGridView y ContextMenu (para acceder al segundo formulario usando un menú contextual al hacer clic derecho sobre la fila o registro seleccionado: 



Recuerda asociar el ContextMenu al DataGridView asignándoselo en su propiedad ContextMenuStrip. Además, para este ejemplo conviene cambiar el modo de selección del DataGridView a “toda la fila” modificando la propiedad SelectionMode con el valor FullRowSelect .

Diseño del formulario

2. En el evento FormLoad del Form1 cargamos los datos al DataGridView



3. En el evento CellClick del DataGridView obtenemos el valor del Id (o llave primaria): 

Usamos un try-catch ya que si el usuario hace clic sobre el DataGridView y no es posible obtener un valor se generaría una excepción. 
4. Antes de continuar con el Form1, vamos a crear el Form2



5. Ahora, vamos a modificar el constructor de la clase del Form2 para que al ser instanciado deba recibir un dato por parámetro. También, en el constructor asignamos el valor recibido a una variable local de este formulario para poder usarla como clave de consulta (o para el propósito para el cual deseemos el dato): 



6. Regresamos al Form1 y en el evento Click del ContextMenu instanciamos el Form2 pasándole por parámetro el Id (o llave primaria) del registro seleccionado en el DataGridView



7. Ahora, cuando hagamos Clic derecho > Editar sobre un registro, se abrirá el Form2 y ya tendrá el valor del Id (o llave primaria) seleccionado en su propia variable. Así que usaremos esta variable para cargar los TextBoxes durante el evento FormLoad



8. Ahora el Form2 carga correctamente los datos del registro seleccionado en el Form1




Si quieres apoyarme económicamente para que siga creando contenido y podamos seguir aprendiendo juntos, en Ko-Fi puedes hacerlo.

¡Sí, quiero apoyarte!

Deja un comentario: