none
La manera más optima de rellenar dinámicamente un grid de filas y columnas con una colección RRS feed

  • Pregunta

  • Hola Compañer@s,

    me gustaria rellenar dinámicamente un grid con filas y columnas según los datos de una colección. Imaginemos que la colección es un datatable (sé que no se puede implementar system.data pero mediante una libreria he logrado poder trabajar con ADO) . Quisiera hacer lo mismo que hago con un listbox con expression blend pero en codigo.

    Mi idea es tener un grid totalmente dinámico que contenga una cabecera con los nombres de las columnas y todas las filas asociadas que tenga el datatable perfectamente ordenada. A su vez que cada fila se pueda clickear o poder sacar un context menu. El código que tengo seria este (aunque se me monta el contenido de una fila sobre cada columna) :

     

        

    For Each col As DataColumn In dt.Columns Dim cd As ColumnDefinition Dim gl As GridLength Dim tb As TextBlock cd = New ColumnDefinition() gl = New GridLength(80) tb = New TextBlock() tb.Text = col.ColumnName tb.FontSize = 22 tb.Margin = New Thickness(0, 20, 0, 5) cd.Width = gl GridData.ColumnDefinitions.Add(cd) Grid.SetColumn(tb, indexc) GridData.Children.Add(tb) indexc += 1 Next For Each fila As DataRow In dt.Rows Dim rd As RowDefinition Dim st As StackPanel rd = New RowDefinition() st = New StackPanel() st.Orientation = Controls.Orientation.Horizontal For i = 0 To dt.Columns.Count - 1 Dim tb As TextBlock tb = New TextBlock() tb.Margin = New Thickness(0, 20, 0, 5) tb.Text = fila(i) tb.FontSize = 22 st.Children.Add(tb) Next GridData.RowDefinitions.Add(rd) Grid.SetRow(st, indexr) GridData.Children.Add(st) indexr += 1 Next


     




    • Editado Pedro Net miércoles, 7 de septiembre de 2011 9:50
    miércoles, 7 de septiembre de 2011 9:48

Todas las respuestas

  • Buenas!

    Dale un vistazo a este artículo sobre como construir un datagrid para Windows Phone 7:

    http://www.silverlightshow.net/items/Building-a-DataGrid-Control-for-Silverlight-for-Windows-Phone-Part-1.aspx

    Diiicho esto... llega el momento en el que protesto :) (si soy un pesao, estoy todo el dia dando con la varaa)

    Yo no te recomiendo usar un datagrid, no es un elemento facil de usar ni intuitivo, prueba a usar un listbox, con un DataTemplate personalizado que muestre lo mismo que una linea del datagrid, pero usando varias lineas de texto, columnas y demás, para hacerlo un poco más bonito y para darle más funcionalidad...

    Es solo mi opinion... :-P


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    miércoles, 7 de septiembre de 2011 11:16
    Moderador
  • El articulo lo habia visto pero quiero hacerlo con los controles que hay sobre wp7. De todas maneras jeray, todo lo que dices se puede hacer sobre codigo? he visto pocos ejemplos de esto. En principio, podrias crear un listbox desde 0 sobre codigo sin data binding , es decir, rellenando tu el contenido de los textblocks.

     

    saludos

    miércoles, 7 de septiembre de 2011 11:37
  • Buenas!

    Podrías crear el listbox por código, crear el DataTemplate en XAML y obtenerlo con FindResource por el nombre para asignarlo al listbox.

    A Continuación puedes definirte una clase en código, que sea la que rellenas con los datos de forma dinámica, estableces una lista de esta clase como el itemssource del listbox y luego vas añadiendo elementos a la lista, que se mostrarán en el listbox con la datatemplate.

    Es algo así, de forma muy conceptual :)


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    miércoles, 7 de septiembre de 2011 11:41
    Moderador
  • Buenas :P

    así es como lo he hecho con xaml , el problema es tener que realizar una clase para cada itemtemplate. Si tienes 15 listas diferentes deberias hacer 15 estructuras...Mi pregunta es si se puede hacer todo a través de codigo , desde la creación del listbox hasta cada item creando los controles que quiera dentro del itemtemplate.

     

    miércoles, 7 de septiembre de 2011 11:53
  • Claro, al usar DataSets tienes ese problema....

    En este caso que haría yo? esto:

    En vez de usar un ListBox, usaría un StackPanel dentro de un ScrollViewer (para poder apilar objetos en el stackpanel y si se pasa de tamaño tener scroll)

    A continuación me crearía un UserControl con la apariencia que quiero que tenga cada linea de la "grid" y exponiendo propiedades públicas para setear los campos del control.

    Y por cada row, rellenaría los campos del usercontrol y lo añadiría al StackPanel.

    de esta forma además le puedo meter lógica al usercontrol para que varíe su aspecto dependiendo de los valores que le paso.

    ¿Que tal?

    Un saludo!


    MCTS .NET Framework 3.5 Windows Forms Application Development
    MCTS .NET Framework 3.5 Windows Presentation Foundation
    Visita mi Blog en Geeks.ms
    Sigueme en Twitter
    miércoles, 7 de septiembre de 2011 13:05
    Moderador
  • Muy interesante esa propuesta. AUnque hay que desarrollarla y ver si todo cuadra jeje.

     

    Gracias Gran Jeday :P

    miércoles, 7 de septiembre de 2011 13:27