Hace unos días veíamos una forma de trabajar con una relación m:n usando LINQ. En esta ocasión vamos a ver otra posibilidad y no voy a poner código, que ando mal de tiempo, así que a ver si consigo explicarme bien.
Supongamos que tengo dos tablas, Series y Personajes. Entre ellas hay una relación n:m (una serie tiene varios personajes, un personaje puede salir en varias series). La tabla que nos permite esta relación digamos que se llama PersonajesDeSerie y que sólo tiene dos campos: IdSerie e IdPersonaje. Por otra parte, en el formulario de personajes, que es donde podemos añadir las series donde aparece el mismo, queremos mostrar el título de la serie y el año de producción (podían ser más cosas, pero tampoco es plan de complicar el ejemplo). Para facilitar las cosas, nos creamos una vista en la base de datos que metemos como DataTable en el DataSet de Personajes. Es decir, tengo tres DataTable: Personajes, PersonajesDeSerie y vMisSeries, ésta última con los campos IdPersonaje, IdSerie, Titulo y Año. En mi caso, metidos en el mismo DataSet por comodidad.
Para el alta (nuevo PersonajeDeSerie) podría hacerlo así:
-
Hago la búsqueda y selección de la serie como Dios me dé a entender (vulgo, el formulario estándar de búsqueda).
-
Con los datos de la Serie y conociendo el IdPersonaje, creo una nueva vMisSeriesDataRow, es decir, una nueva fila de la vista. De este modo, muestro ya los datos aún cuando no haya grabado nada.
-
Con el IdPersonaje y el IdSerie genero una nueva PersonajesDeSerieDataRow, que es lo que mando a la base de datos.
¿Algo idiota? Puede, pero no es más que un ejemplo sencillo. La idea final es la siguiente: puede resultarnos más fácil trabajar con un DataTable (mostrar datos, añadir, modificar, eliminar) que no se corresponda directamente con ninguna tabla de la base de datos, sino que sea el resultado de una consulta más o menos compleja. Luego, en otra capa de la aplicación, tomamos de las filas de este DataTable los datos para crear las filas nuevas, modificadas o eliminadas que mandaremos a la base de datos.
Por cierto, para eliminar de la base de datos una fila de PersonajesDeSerie que no tengo en memoria, puedo crear la fila, añadirla al DataTable, aceptar los cambios y borrarla con Delete y, al hacer el Update con el TableAdapter, se eliminará. Un poco rebuscado el método, pero funciona y puede que, en ocasiones, sea lo más cómodo.
En fin, una entradita corta y confusa, pero es que no tengo tiempo de más.
buen dia amigo descargue una datatable API y la implemente, pero requiero que la tabla se adapte a la ventana es decir que no salga el scroll inferior sino que se haga pequeña según el tamaño de pantalla que uno quiera, espero respuesta gracias por tu ayuda
Buenas, no sé a qué «datatable API» te refieres.
Hola, agrega un ejemplo.