2011-04-01 18 views
9

Si tengo el siguiente código de ASP.NET (no es completa - obviamente hay una gran cantidad faltante, pero nada de eso importa):¿Cómo puedo vincular un GridView a un objeto personalizado?

<asp:GridView> 
     <Columns> 
      <asp:TemplateField> 
       <ItemTemplate> 
        My Label: <asp:Label /> 
       </ItemTemplate> 
      </asp:TemplateField> 
      <asp:TemplateField> 
       <ItemTemplate> 
        My Text Box: <asp:TextBox /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

Y si tengo algo como esto en el CodeBehind:

Private MyListOfObjects As List(Of MyObject) 

... 

Public Class MyObject 

    Public MyTextBoxString as String 
    Public MyLabelString as String 

End Class 

¿Cómo puedo vincular GridView para que una fila sea equivalente a un elemento en mi lista MyListOfObjects, y para que los datos se completen y persistan en todas las cargas de página o devoluciones? Nunca antes había hecho un enlace de datos personalizado como este, por lo que una explicación completa sería muy útil. Todos los tutoriales que he visto hasta ahora solo hablan sobre el uso de GridViews directamente con los resultados de la consulta de la Base de datos, y eso no es lo que necesito.

Gracias!

+0

Compruebe si esto ayuda: http://weblogs.asp.net/gurusarkar/archive/2010/04/28/binding-list-of-custom-class-to-gridview-or-listview-control.aspx – gbs

+0

ver mi respuesta a tu pregunta. – JonH

Respuesta

8

Simplemente configure la fuente de datos de la vista de grilla en su objeto.

MyGridView.DataSource = myList 
MyGridView.DataBind() 

Aquí hay un post muy similar:

Binding a method that returns List<employee> to a gridview

Parece que está utilizando una lista de vb.net. Recuerde que las listas pueden contener enteros, cadenas, fechas, objetos (estos incluyen tipos definidos por el usuario (su objeto)). Para que pueda vincular una vista de cuadrícula a un objeto de lista estableciendo la propiedad de fuente de datos en su lista.

En el ejemplo anterior, myList, podría contener una tonelada de objetos de empleado, etc. Asignarlo a la fuente de datos y .DataBind() y tener una vista de cuadrícula con cada fila que contenga su objeto.

+0

Excepto que he predefinido mis columnas de antemano, y mi lista no coincide con las columnas, por lo que debo especificar manualmente y asignar las filas a los objetos dentro de mi lista. – qJake

+0

@SpikeX - No necesita hacer nada, se mostrarán las columnas que tenga '' de su vista de cuadrícula. Por ejemplo, suponga que tiene un objeto de cliente con 3 propiedades de edad, nombre y fecha de nacimiento. Si solo desea mostrar el nombre y la edad, en su marca .aspx tiene 2 campos de plantilla que tienen nombre y antigüedad. Mi solución maneja esto para ti. – JonH

+0

Su respuesta fue la más cercana, pero no describió cómo vincular 'TemplateFields' individuales a las propiedades del objeto; necesita usar' <% # Databinder.Eval (Container.DataSource, "MyPropertyName")%> ' – qJake

1

Usted puede hacer algo como

My Label: <asp:Label id="myLabel" runat="server" Text='<%# Eval("MyTextBoxString") %>' /> 

en el marcado y cosas similares para su cuadro de texto.

GridView1.DataSource = MyListOfObjects 
GridView1.DataBind() 
+0

¿No lo entiendo? – ppumkin

1

En primer lugar recordar ningún tipo de control de enlace como GridView, DropdownList e.t.c se unen a las propiedades públicas, por lo que primero hacer que sus miembros públicos a las propiedades públicas.

A continuación, crear objetos de la clase MiObjeto y añadirlos a su List<MyObject> objeto

Por último, puede persistir este objeto lista guardándolo en Session o ViewState para mantenerla después de las devoluciones de datos.

¡Espero que pueda hacerlo ahora! puede pedir más ayuda si es necesario.

Cuestiones relacionadas