hola, que tal.

Estaba realizando una aplicacion en la cual queria hacer uso de las nuevas 
ventajas que trae el Dataset para la version 2005 del VS.

La verdad esta genial el uso de los TableAdapter, y arma el dataset desde las 
tablas de forma increible.

Pero me encontre con dudas al momento de cargar el dataset, mas puntualmente 
las dudas las tengo con los DataRelation.
Tal ves esto se deba a que estoy pensando usarlos de una forma que no es la 
correcta.

A ver paso a explicar un poco lo que pretendo.

Resulta que el dataset esta compuesto por cuatro data tables.
Con las entidades: Cliente, Factura, Detalle, Producto.
Creo que las relaciones estan mas que claras se entra por id de cliente y sale 
el resto, y como veran esto es para utilizarse en un reporte.
Relaciones: Cliente -> Facturas -> Detalles -> Productos.

Ahora bien el dataset al arrastar las tablas creo las relaciones perfectamente, 
pero el problema lo encuentro al momento de realizar el Fill() con el table 
adapter.

Al dataset de Clientes le agregue un parametro para que filtre por el 
idcliente, y la idea es pasarle este id al momento de hacer el Fill(), y que el 
resto de las entidades se cargue solas por medio de las relaciones que tiene 
con al entidad cliente.

O sea, seria algo asi:

ClienteTableAdapter.Fill(dsReporte.Cliente, <idcliente>);

Y con esto solo cargue la tabla relacionada con los cliente en este caso 
facturas.
Aclaracion, la propiedades nested estan en true.

Lo raro es que cuando inspecciono el dataset por medio del Dataset Visualizer, 
solo la entidad cliente esta cargada correctamente, el resto esta vacia.

Ahora bien que se me ocurrio, hacer el fiil() a todas las entidades:

ClienteTableAdapter.Fill(dsReporte.Cliente, <idcliente>);
FacturaDataAdapter.Fill(dsReport.Facturas)
FacturasDetalles.Fil(ds.FacturaDetalles)
Productos.Fill(ds.Productos)

Pense que de esta forma, explicito la carga y por la relaciones solo carga lo 
necesario, pero inspeccionando las entidades se estan cargado toda la base de 
datos, sin filtro alguno.

Algo por lo visto estoy haciando mal, o utilizandolo mal.

Buscando en internet, encontre que hay una propiedad GetChildRows(), que me 
permite navegar por las relaciones, pero en este caso lo que quiero es llenar 
las entidades en base a las relaciones no recorrerlas.

Otra forma que se me ocurrio realizar es agregar parametros de filtro a cada 
entidad, pero la verdad es bastante molesto esto ultimo, quedaria algo asi como:

ClienteTableAdapter.Fill(dsReporte.Cliente, <idcliente>);

FacturaDataAdapter.Fill(dsReport.Facturas, dsReporte.Cliente.Rows[0].idCliente)

FacturasDetalles.Fil(ds.FacturaDetalles, dsReporte.Facturas.Rows[0].idFactura)

Productos.Fill(ds.Productos,dsReporte.FacturaDetalle.Rows[0].idDetalle )

Igualmente esto ultimo no me cierra del todo ya que como veran esto accediendo 
al indice cero de las filas, y las facturas son una coleccion, al igual que los 
detalles, esto estaria mal, pero no veo como hacerlo de otra forma.
Salvo que a las facturas le haga un foreach y un Fill que agregue a la entidad, 
pero esto si que se complica.


Bueno me extendi bastante, espero que me explicara bien, y bueno cualquier 
sugerencia sera de ayuda.

Gracias.








__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis! 
¡Abrí tu cuenta ya! - http://correo.yahoo.com.ar

Responder a