Je cherche à charger un GridView avec une liste générique et à générer les colonnes automatiquement. J'obtiens une exception qu'il n'a pas les propriétés correctes pour lui permettre de générer automatiquement les colonnes.Gridview utilisant une liste générique en tant que colonnes DataSource et auto-génération
Exception
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>
chargement de la page
//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
Classe étudiant
public class student
{
public string name;
public string address;
}
Toutes les pensées ou suggestions sont appréciés, ne hésitez pas à me faire savoir si je vais sur ce complètement faux.
une réponse à une question similaire que j'avais. Ce que je ne comprends pas c'est pourquoi ça marche. Pourquoi est-ce que je peux accéder à 'student.name' manuellement mais' GridView' ne peut pas le faire à moins que j'ajoute les accesseurs? – Brendan
Je ne peux pas dire spécifiquement, je peux seulement vous dire que la grille n'aura accès qu'aux propriétés et non aux champs. Je peux * deviner * que lorsqu'elle fait la réflexion, elle reflète sur les propriétés publiques ('BindingFlags.GetProperty') et non sur les champs publics (' BindingFlags.GetField'). – CodingGorilla