2011-09-19 4 views
0

J'ai un contrôle utilisateur qui contient un GridView. Je passe un objet source de données IEnumerable à l'instance de contrôle utilisateur. Comment puis-je utiliser un ForEach pour faire défiler la source de données dans le code de contrôle utilisateur pour afficher les colonnes que je veux depuis la source de données?Problème de contrôle d'utilisateur ASP.NET GridView

Jusqu'à présent, j'ai le code suivant dans le code derrière du contrôle de l'utilisateur:

public IEnumerable<object> DataSource { get; set; } 

protected void Page_Load(object sender, EventArgs e) 
{ 
    this.GridView1.DataSource = DataSource; 

    foreach (var item in DataSource) 
    { 
//The line below gives an error - what's the correct way to do this? 
     this.GridView1.Columns.Add(new BoundColumn() {DataField = "What to put here", HeaderText = "What to put here"; } 

    } 

    this.GridView1.DataBind(); 
} 

Répondre

2

Vous ne devriez pas en boucle sur tous les articles de la source de données, vous Looping verticalement sur tous les enregistrements pendant que vous voulez boucle une seule fois, horizontalement, sur toutes les colonnes. Puisque vous connaissez la liste des propriétés de l'objet contenu dans le DataSource, vous pouvez le faire de manière statique et même pas dans un foreach. Si vous voulez vraiment l'avoir dynamique alors vous pouvez utiliser Reflection et boucle sur tous les champs publics du premier objet disponible dans votre IEnumerable.

Edit: pour trouver tous les champs publics d'un objet via la réflexion voir ici:

How can I find all the public fields of an object in C#?

mais cela ne vaut que si vous voulez faire générique, si vous savez déjà que votre objet contient certains champs comme Nom, Adresse et Email, par exemple, vous n'en avez pas besoin.

+0

Merci pour votre réponse. Je pense que j'ai besoin d'un exemple de code car je ne comprends pas. – Theomax

+0

Pour l'instant je ne veux pas le rendre générique. Je veux savoir comment spécifier les colonnes à utiliser dans la grille de l'objet source de données. – Theomax

+0

alors s'il vous plaît modifier votre question montrant les propriétés de l'objet à l'intérieur de votre IEnumerable. pourquoi est-ce un IEnumerable et non un IEnumerable ?? –

Questions connexes