Más sobre Datagrid y formularios

18/02/2004 - 17:41 por Manuel Flores | Informe spam
Hola


Quisiera hacer lo siguiente:

1. Pulso sobre una fila del datagrid y de alguna forma
llamo a un nuevo formulario que mostraria en controles
(textbox, combos, etc) los valores de los campos que se
correspondan con el registro identificado por la clave


de esa fila sobre la que he pulsado.

2. En esa nueva ventana, modifico algún valor y al
aceptar esos cambios, se cierra la ventana y se


actualiza

el datagrid del otro formulario.



Para el punto 1 podes utilizar el evento DoubleClick de
la grilla, dentro de el podrias obtener una referencia de
tipo DataRow para el DataTable que tienes como origen de
la grilla (para un DataView el funcionamiento es analogo):

Esto obtiene el DataRow actual en la grilla:

((DataTable)dgr.DataSource)[dgr.CurrentRowIndex]

Luego podrias pasar la referencia del objeto DataRow al
formulario que deseas abrir. Lo podes pasar como
parametro
en el constructor o bien a traves de una variable miembro
o propiedad del formulario al que llamaras luego de
haberlo creado.

Pasando la referencia a la fila del DataTable y luego
modificando desde el formulario llamado (cuando se
acepten
los cambios) la actualización sería automática en el
DataSource de la grilla (acordate de hacerle Refresh()
luego de modificados los datos)




Bien, el caso que NO PUEDO pasar DataRow porque DATAGRID
no tendrá todas las columnas, solo mostrará algunas,
entonces si paso DataRow y modifico no podré cambiar el
resto de campos. Qué puedo hacer?

Gracias.
 

Leer las respuestas

#1 pablo crosio
18/02/2004 - 18:01 | Informe spam
Hola!

Lo importante es si traes o no todos los campos al
cliente es decir si el DataTable contiene o no todos
los campos


Una forma seria la de traer todos los campos al cliente
pero solamente mostrar los que queres a traves de estilos
de la grilla... de esta forma podrias pasar el DataRow
completo y modificarlo... (igual forma que antes)

-

Si no traes todos los campos al cliente, entonces imagino
que cuando aceptan la modificacion de los datos de un
registro, deberas grabar ya al motor de base de datos; a
diferencia de modificar todos los registros que quieras en
el DataTable y luego confirmarlos de una vez...

Podrias entonces pasar solamente al formulario de edicion
solamente el campo clave del DataTable en la grilla...
luego hacer la consulta para traer los datos de ese
registro modificarlos grabarlos al motor y
luego refrescar la grilla...



Salu2!!

Pablo






Hola

Quisiera hacer lo siguiente:

1. Pulso sobre una fila del datagrid y de alguna forma
llamo a un nuevo formulario que mostraria en controles
(textbox, combos, etc) los valores de los campos que se
correspondan con el registro identificado por la clave


de esa fila sobre la que he pulsado.
2. En esa nueva ventana, modifico algún valor y al
aceptar esos cambios, se cierra la ventana y se


actualiza
el datagrid del otro formulario.



Para el punto 1 podes utilizar el evento DoubleClick de
la grilla, dentro de el podrias obtener una referencia de
tipo DataRow para el DataTable que tienes como origen de
la grilla (para un DataView el funcionamiento es analogo):

Esto obtiene el DataRow actual en la grilla:

((DataTable)dgr.DataSource)[dgr.CurrentRowIndex]

Luego podrias pasar la referencia del objeto DataRow al
formulario que deseas abrir. Lo podes pasar como
parametro
en el constructor o bien a traves de una variable miembro
o propiedad del formulario al que llamaras luego de
haberlo creado.

Pasando la referencia a la fila del DataTable y luego
modificando desde el formulario llamado (cuando se
acepten
los cambios) la actualización sería automática en el
DataSource de la grilla (acordate de hacerle Refresh()
luego de modificados los datos)




Bien, el caso que NO PUEDO pasar DataRow porque DATAGRID
no tendrá todas las columnas, solo mostrará algunas,
entonces si paso DataRow y modifico no podré cambiar el
resto de campos. Qué puedo hacer?

Gracias.


.

Preguntas similares