2010-11-11 14 views
14

Estoy buscando cargar un GridView con una lista genérica y hacer que las columnas se generen automáticamente. Recibo una excepción que no tiene las propiedades correctas para permitirle generar automáticamente las columnas.Gridview utilizando una lista genérica como columnas DataSource y Generación automática

Excepción

The data source for GridView with id 'GV1' did not have any properties or attributes from which to generate columns. Ensure that your data source has content. 

GridView

<asp:GridView ID="GV1" runat="server" AutoGenerateColumns="true"></asp:GridView> 

carga de la página

//LINQ query to populate list 
    List<student> su = new List<student>(); 
    dbDataContext db = new dbDataContext(); 
    var q = from c in db.data_table 
      where c.processed == false 
      orderby c.date_complete descending 
      select c; 
    //iterate through results and add to list 
    foreach(var c in q) 
    { 
     student s = new student { name = c.name, address = c.address }; 
     su.Add(s); 
    } 

    //Load GridView 
    GV1.DataSource = su; 
    GV1.DataBind(); //Exception thrown here 

Clase Estudiante

public class student 
{ 
    public string name; 
    public string address; 
} 

cualquier idea o sugerencia se aprecia, no dude en hacérmelo saber si voy sobre este completamente equivocado.

Respuesta

21

Trate de ajustar su clase student y cambiar sus propiedades en campos como esto:

public class student 
{ 
    public string name { get; set; } 
    public string address { get; set; } 
} 
+0

Este respondido a una pregunta similar que tuve. Lo que no entiendo es por qué funciona. ¿Por qué es que puedo acceder 'student.name' manualmente pero' GridView' no puede hacerlo a menos que agregue los accessors? – Brendan

+3

No puedo decir específicamente, solo puedo decirte que la grilla solo tendrá acceso a las propiedades y no a los campos. Puedo * adivinar * que cuando hace el reflejo, se refleja en las propiedades públicas ('BindingFlags.GetProperty') y no en los campos públicos (' BindingFlags.GetField'). – CodingGorilla

Cuestiones relacionadas