10.09.2009

WPF Datagrid Y Linq

Despues de un post de risa, aqui les va un post mas serio y tecnico

He estado leyendo varios libros sobre linq y WPF, de los cuales muchos fueron escritos al momento de ser liberadas las Betas de los mismos y por lo tanto el codigo no funciona actualmente, asi que investigando mas al respecto, aqui les pongo mas sobre como poner un datagrid en WPF

1- Crear un proyecto en Visual Studio del tipo WPF

2- Conectar una BD ya sea local o de internet al proyecto

3- Dentro del proyecto agregar un nuevo item de tipo Linq2Sql Class

Linq2SQL

4- Abriendo el archivo BML que se genero, arrastramos dentro las tablas de nuestra Base de Datos, podemos arrastrar todas, o solo las que queramos,

BMLFile

esto nos creara un Datacontext, que mas adelante utilizaremos.

Ok, con esto hemos conectado nuestra BD a linq, ahora veamos como ver los datos en la BD e insertar con LINQ

1- al proyecto en WPF, agregamos 2 textbox, uno para ID y otro para Descripcion de los colores, tambien agregamos 2 botones, Agregar, Refrescar, y por ultimo la muy temida Datagrid,

2- Antes de iniciar nuestro componente creamos el objecto Datacontext de nuestra BD

SpeiraDataContext speiraDB = new SpeiraDataContext();
 

Donde SpeiraDatacontext se creo apartir del nombre de nuestra BD

3-en el codigo del wpf form despues del initializeComponet, agregamos un metodo LlenarGrid(); el cuan llevara lo siguiente :

private void llenaGrid()
        {  
            grdColores.ItemsSource = speiraDB.COLORES.ToList();
        }

donde a grdcolores es el nombre de nuestro grid, y speiraDB es el dataconxtext con la tabla de COLORES


4-En el boton de agregar ponemos los siguiente:


COLORES colores = new COLORES { COLOR_ID = txtID.Text, COLOR_DESC = txtDescription.Text };
speiraDB.COLORES.InsertOnSubmit(colores);
speiraDB.SubmitChanges();

Aqui especificamos una nueva instancia de la tabla de COLORES, y especificamos un tipo de binding donde COLOR_ID corresponde a mi textbox ID, al dar click insertara ese texto en el objeto COLORES, y despues hacemos un submit changes en SpeiraDB,

Nota:Aqui solo estamos insertando, no estamos validando si los datos ya exiten en la BD.

5- Una vez insertando en el boton de refrescar ponemos el siguiente metodo para refrescar el grid

IEnumerable<COLORES> colorColl = from colrs in speiraDB.COLORES select colrs;
grdColores.ItemsSource = null;
grdColores.ItemsSource = colorColl.ToList();
grdColores.Items.Refresh();

Aqui una vez mas, usamos LINQ, creamos una coleccion de COLORES, y con sintaxis LINQ, hacemos la busqueda en toda la BD de Todos los Colores, los agregamos a la coleccion, y se la pegamos al Grid.


Nota: en el codigo XAML del datagrid hay que especificar la siguiente propiedad

AutoGenerateColumns="True"



Espero que les haya sido de ayuda, si les causo algun error nimodo jejeje a mi me funciono, ahora solo falta validar que los datos antes de ser insertados, no existan en la BD, aun estoy trabajando en ello.. Suerte!



1 comentario: