none
¿Como cargar de datos un DataGrid con WPF desde una BD? RRS feed

  • Pregunta

  • Hola!

    Quiero cargar de información un datagrid, pero no tiene las propiedades de datasource y refresh como en proyectos Windows Forms. Este DataGrid es en un proyecto de tipo WPF, trato de pasarle un DataTable como origen de datos con ADO.NEt pero no tienes estás propiedades ¿Como lo hago con WPF? ¿Como lo actualizo si no tiene refresh?

    Gracias!

    miércoles, 18 de abril de 2012 0:22

Todas las respuestas

  • Hola,

    En WPF la propiedad que buscas se llama ItemSource Y en WPF puedes extender mucho su apariencia y funcionamiento.

    Noto que dices que lo quieres cargar con un DataTable, para esto deberas preguntar por la propiedad DefaultView del mismo.

    Te dejo un ejemplo con autogeneracion de columnas:

    WPF:

    <DataGrid AutoGenerateColumns="True" 
                      Name="dataGrid1" 
                      VerticalAlignment="Top">            
    </DataGrid>

    C#

                dataGrid1.ItemsSource = null;
                DataTable dt = new DataTable();
                dt.Columns.Add("Nombre");
                dt.Columns.Add("Apellido");
                dt.Rows.Add("Nicolas", "Herrera");
                dataGrid1.ItemsSource = dt.DefaultView;

    Te dejo este excelente articulo (en ingles):

    WPF DataGrid Control

    Espero te sea de utilidad,

    Saludos.



    Nicolás Herrera
    Bogotá - Colombia
    BLOG - Leader Group BogotaDotNet
    "Daría todo lo que sé, por la mitad de lo que ignoro." Rene Descartes

    • Propuesto como respuesta David_González lunes, 30 de abril de 2012 16:54
    viernes, 20 de abril de 2012 2:01
  • Hola Victor.

    Basicamente es como te ha comentado Nicoloco.

    No obstante, te dejo 2 post donde se habla del tema y puedes obtener mas informacion:

    http://social.msdn.microsoft.com/Forums/es/wpfes/thread/4f787f56-d6b5-4711-b1c0-ddb864324f5b

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

    Si tienes algun problema comentalo.


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    lunes, 30 de abril de 2012 16:54
  • No obstante, esa forma tiene algun que otro problemilla con el render del datagrid.

    Para un proyecto en el que trabajo, rellenamos un datagrid en base a un datatable generado:

    DataTable tabla = objeto.MakeDataTable();
    midatagrid.DataContext = tabla;
    
    midatagrid.ScrollIntoView(midatagrid.Items[midatagrid.Items.Count - 1], midatagrid.Columns[midatagrid.Columns.Count - 1]);

    Al llamar al método ScrollIntoView genera una excepción ya que midatagrid.Columns.Count tiene valor 0, por lo que al parecer no se ha hecho el render en la sentencia midatagrid.DataContext = tabla, y al querer desplazarnos por el datagrid da errores.

    Para solucionar esto, aplicamos una chapucilla, y es utilizar un dispatcherTimer que retrasara el movimiento hasta que el UIThread haya pintado la interfaz y posteriormente movernos por el grid. 

    Todavia estamos buscando una solución para que sea algo mas elegante, ya que esto hace que el rendimiento de la aplicación no sea del todo bueno.

    jueves, 13 de diciembre de 2012 11:52
  • hola chemi_ma.

    ¿has probado usar la funcion UpdateLayout() de midatagrid antes de establecer el ScrollIntoView?


    Saludos
    David González
    MCP, MCTS
    Visita mi Blog en: http://www.dgzornoza.com/

    jueves, 13 de diciembre de 2012 17:46
  • Thanks ! 
    viernes, 5 de septiembre de 2014 11:36
  • Muy elegante y limpia tu solución
    sábado, 7 de julio de 2018 11:41