none
Uso de Data Bindings en WPF. RRS feed

  • Pregunta

  • Hola, estoy iniciándome en WPF desde hace un tiempo y estoy intentando de alguna forma aprender todo lo que se desarrollar en aplicaciones WinForm normal en una aplicación WPF para ir adaptándome un poco al entorno y a las nuevas posibilidades que da dicha tecnologia. Pero tengo un problema y es el siguiente. Todo lo relacionado con enlace a datos lo realizaba con ADO.NET y SQLserver, entonces cuando llegue a esta parte en WPF a la hora de ponerme a trastear descubrí que era totalmente diferente. Quisiera saber mas sobre el uso de los Data Binding en WPF para realizar estos enlaces a datos. Ya que por mas que lo he intentado no he conseguido siquiera enlazar un simple datagrid a una tabla de una base de datos SqlServer.
    Si alguien puede exponerme alguna explicacion que me ayude a mi problema, muchas gracias.

    Un saludo.
    lunes, 28 de febrero de 2011 18:12

Respuestas

  • Hola Sergio.

    En realidad si que puedes usar ADO.NET de la misma forma y de echo es independiente del sistema de Bindings de WPF/Silverlight.

    En este post explico un ejemplo que enlaza un DataSet a un gridView (aunque lo creo a mano, pero se puede obtener de una BBDD)

    http://social.msdn.microsoft.com/Forums/es-AR/wpfes/thread/0fdd885c-086d-428c-9048-87d82f8e2eca

     

    Por otro lado, existen alternativas que te permiten un desarrollo y acceso a datos mas intuitivo que es EntityFramework, es una alternativa a los DataSets de ADO.NET y aunque inicialmente es otro enfoque, a la larga veras que te da mas flexibilidad, ya que puede usarse LINQ y LINQ es un lenguaje de consultas para cualquier tipo de objeto que es de gran utilidad. En fin, en un dia no lo vas a conocer todo, pero es ir metiendote y poco a poco ir avanzando.

    Y si necesitas algo en concreto, puedes comentarlo aqui.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    • Marcado como respuesta SergioVasco miércoles, 2 de marzo de 2011 8:01
    lunes, 28 de febrero de 2011 19:36

Todas las respuestas

  • Hola Sergio.

    En realidad si que puedes usar ADO.NET de la misma forma y de echo es independiente del sistema de Bindings de WPF/Silverlight.

    En este post explico un ejemplo que enlaza un DataSet a un gridView (aunque lo creo a mano, pero se puede obtener de una BBDD)

    http://social.msdn.microsoft.com/Forums/es-AR/wpfes/thread/0fdd885c-086d-428c-9048-87d82f8e2eca

     

    Por otro lado, existen alternativas que te permiten un desarrollo y acceso a datos mas intuitivo que es EntityFramework, es una alternativa a los DataSets de ADO.NET y aunque inicialmente es otro enfoque, a la larga veras que te da mas flexibilidad, ya que puede usarse LINQ y LINQ es un lenguaje de consultas para cualquier tipo de objeto que es de gran utilidad. En fin, en un dia no lo vas a conocer todo, pero es ir metiendote y poco a poco ir avanzando.

    Y si necesitas algo en concreto, puedes comentarlo aqui.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    • Marcado como respuesta SergioVasco miércoles, 2 de marzo de 2011 8:01
    lunes, 28 de febrero de 2011 19:36
  • Gracias David, analice el ejemplo con detenimiento y me surgen unas dudas en estas dos lineas expuestas.

    El componente Datagrid en WPF a diferencia del de WinForm no tiene la propiedad DataSource, imagino que ItemsSource es similar. 
    Perdona mi ignorancia, pero al no estar familiarizado con el control, nose porque hay que crearse una vista antes, y tampoco el modo de como se enlaza.
    Espero haberme explicado mas o menos claro. Gracias otra vez.

     // obtener la vista de la tabla
     System.Data.DataView view = createDataSet("David", "Gonzalez").Tables[0].DefaultView;
    
     // establecer la fuente de datos al datagrid
     dataGrid1.ItemsSource = ((System.ComponentModel.IListSource)view.ToTable()).GetList();
    

    lunes, 28 de febrero de 2011 22:57
  • Hola Sergio.

    Exacto, ItemSource y DataContext son las propiedades de enlace de datos, la primera mas pensada para colecciones y la segunda para objetos. De modo que en este caso concreto usamos la primera.

     

    En cuanto a la vista, (existen otras alternativas, pero esta es la mas sencilla para este ejemplo).

    El echo de obtener la vista es tan solo por si se quiere filtrar, si no se va a filtrar no es necesario (pero en el ejemplo la queria filtrar por un campo), con lo que no hace falta obtener la vista si no se va a filtrar.

    por otro lado el Objeto ItemSource admite un IEnumerable, de modo que una forma de pasar un DataTable a IEnumerable es haciendo uso de la interface IListSource para obtener su lista

    (mas info sobre esta interface en :http://msdn.microsoft.com/es-es/library/system.componentmodel.ilistsource(v=vs.80).aspx)

    Creo que no me dejo nada.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    martes, 1 de marzo de 2011 7:48
  • Hola David.

    Si entiendo bien, lo que realiza IList en la anterior instrucción es devolver una lista de tipo IEnumerable con los datos del contenido de la tabla y esta asignarla al ItemSource. Corrígeme si me equivoco.

    ¿Hay mas posibilidades de añadir el contenido del data table al item source? ¿Optaste por esta opcion porque es mejor por alguna razon o mas sencilla que otras?

    Gracias de nuevo.
    martes, 1 de marzo de 2011 15:27
  • Hola Sergio.

    Exacto, la idea es esa.

    La forma mas basica y sencilla es esa, luego se puede optar por hacer uso de un CollectionViewSource para asociar al gridView el cual puede dar algo mas de flexibilidad, en general siempre que se use un ienumerable se puede usar cualquier tipo de objeto para enlazar a un gridView y ello otorga la posibilidad de usar linq y metodos extensores asi como arboles de expresiones de linq, lo cual permite  acceder a datos de una forma optima, sencilla y escalable.

    Recuerda que puedes usar DataSets por dar compatibilidad a algun sistema anterior, pero si no tienes que suministrar esa compatibilidad, lo ideal es que hagas uso de entityframework para enlazar a datos, te dara toda la funcionalidad de un ORM


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/
    martes, 1 de marzo de 2011 20:15