Ver Mensaje Individual
  #4 (permalink)  
Antiguo 07/03/2008, 06:06
Avatar de zacktagnan
zacktagnan
 
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años, 11 meses
Puntos: 3
Re: Crear una tabla dinámicamente

Hola jlbautista:

Te explico más detalladamente.

Todo se trata de hacer un inserto de un Albaran en el que aparte de los datos de la empresa/cliente al que se le realiza el albarán, consta por ejemplo los Residuos que se le recogen, entre otras cosas.

Para todo esto, entran en juego tres tablas de la Base de la Datos:
- ALBARANES (datos generales del Albarán)
- RESIDUOS (lista de Residuos disponibles)
- RESIDUOS_A (registros de Residuos recogidos referidos a un Albarán)


Estos serían los campos que interesan para lo que pido por cada tabla:

[ALBARANES]

CREATE TABLE [dbo].[ALBARANES](
[codigo] [int] IDENTITY(1,1) NOT NULL
...


[RESIDUOS]

CREATE TABLE [dbo].[RESIDUOS](
[codigo] [int] IDENTITY(1,1) NOT NULL,
[nombreC] [nvarchar](50) COLLATE Modern_Spanish_CI_AS NOT NULL
...


[RESIDUOS_A]

CREATE TABLE [dbo].[RESIDUOS_A](
[codigo] [int] IDENTITY(1,1) NOT NULL,
[albaran] [int] NOT NULL,
[residuo] [int] NOT NULL,
[cantidad] [int] NOT NULL,
[personas] [int] NOT NULL
...


Los datos de la tabla dinámica que me interesa crear recoge los datos que finalmente se van a insertar en la tabla [RESIDUOS_A].
Por cada Residuo recogido, se creará un nuevo registro en la mencionada tabla con el código del Albarán al que se refiere
Es decir, cuando se inserta el Albarán en su tabla correspondiente, si éste albarán lleva consigo Residuos recogidos, por cada residuo se insertará una línea en la tabla [RESIDUOS_A] con el código del Albarán al que hace referencia (campo [albaran]), el código del residuo (campo [residuo]), la cantidad, y un número de personas.
Luego la tabla [ALBARANES] se relaciona por el campo [albaran] con la tabla [RESIDUOS_A] y ésta por el campo [residuo] con la tabla [RESIDUOS].


A ver imagínate que estás en la web y vas al apartado de insertar un albarán.
Tienes los típicos campos/listas de insertar/elegir datos de cliente y tal y tal. Y luego un apartado para lo de los Residuos que se activará ó se mostrará a través de un link ó chequeando una casilla de verificación.
Es decir, igual, chequear una casilla y se mostrará un Panel con una tabla que lista los Residuos que se pueden recoger.
Entonces, por cada Residuo, si se recoge algo de él, aparte del Nombre que ya sale como indicativo, habrá un TextBox para teclear la Cantidad recogida y el Nº de Personas qu suministraron el Residuo:

Nombre_Residuo_1 | Cantidad_Residuo_1 | NºPersonas_Residuo_1
-----------------------------------------------------------------------------------------------
Nombre_Residuo_2 | Cantidad_Residuo_2 | NºPersonas_Residuo_2
-----------------------------------------------------------------------------------------------
... | ... | ...
-----------------------------------------------------------------------------------------------
Nombre_Residuo_N | Cantidad_Residuo_N | NºPersonas_Residuo_N



Cita:
1. Haces la consulta a la BD y obtienes la tabla RESIDUOS.
2. Ese resultado quieres meterlo en filas de 3 textBox (id, Cantidad, Personas)
3. Capturar esos resultados o incluso modificarlos para luego guardarlos a RESIDUOS_A?
1. Si, claro tendrá que haber una consulta sobre la tabla Residuos para que me saque la lista de Residuos
2. Si también, aunque se mostrará:
[NombreResiduo, TextBox para indicar Cantidad, TextBox para indicar Personas]
3. También es como dices, en el inserto se capturarán para insertarlos en RESIDUOS_A cómo he indicado antes. Y luego, cuando se vaya al apartado de edición del Albarán, sacando la tabla con los datos de Residuos recogidos se podrán modificar y finalmente volverlos a guardar en [RESIDUOS_A]

Cita:
Otra: ALBARAN es UN ID de cada REGISTRO obtenido de la consulta a RESIDUOS???
Como he explicado antes el ID del Albarán a insertar ó cuando sea modificado es el dato que se guarda en el campo [albaran] de la tabla [RESIDUOS_A]

Cita:
de todos modos te voy diciendo q para generar tablas dinámicas es mucho mejor usar GRID's
Lo del GridView ya he hecho una prueba vinculándolo con un SqlDataSource que lleva esta SELECT:

Código:
SELECT
	codigo, nombreC AS Residuo,
	 '' AS Cantidad, '' AS Personas
FROM
	RESIDUOS
WHERE
	historico = 0
ORDER BY
	nombreC
Así me sale un GridView y en modo Mostrar, por cada una de sus filas, se ve el Nombre del Residuo, la columna de Cantidad en blanco, y la de Personas también en blanco.
Y cuando doy a Editar fila, en las columnas de Cantidad y Personas aparecen sendos TextBox para insertar los números correspondientes.
Pero luego no puedo conservar lo que se teclea por cada fila ó si cambio de fila para insertar las cantidades de otro Residuo si no es guardando los datos. Si nisiquiera tengo aún el ID del Albarán que se va a insertar

Quiero decir que acepto los cambios de la fila modificada estos se tienen que modificar ya en la tabla de la base de datos aún antes de insertar el Albarán al que van a hacer referencia (Antes de hacer el inserto de Albarán no dispongo del ID de éste)

Luego, lo del Grid en principio no me serviría a no ser que haya otra forma.
Tampoco he visto que un GridView sirva para Insertar sino más bien para modificar ó eliminar registros de una tabla...Bueno, igual tu tienes otra idea de hacerlo ...

Resumiendo:
Yo lo que quiero es presentar como el típico formulario de Residuos Recogidos y dar la opción de rellenar todas las casillas necesarias de una vez y luego cuando se pulse el botón de Insertar el albarán, una vez obtenido el ID del Albarán insertado, por cada residuo recogido se guarde/modifique un registro en la tabla RESIDUOS_A, con el ID del albarán, el ID del residuo, la cantidad, y el nºPersonas.

Espero que ahora se entienda mejor ... Sino sigo explicándolo ... A ver si obtengo alguna ayudita al final de cómo obtener lo que pretendo.
__________________
Saludos,

zacktagnan.
=================================================