2009-05-27 6 views
0

Je lie une source de données Object à une vue de grille. Mon objet a une collection d'éléments dans l'une des propriétés. Ce qui est une liste. Comment puis-je boucler à travers cela et lier les éléments à une colonne dans GridView ?.Liaison de vue de grille

+0

Si j'ai raison, chaque ligne est mappée à l'un de vos objets, mais vous souhaitez que l'une des colonnes soit liée à une propriété de cet objet qui est une collection. Ma grande question est comment exactement avez-vous l'intention d'afficher cette collection? Asp.Net ne sait pas comment rendre une collection lors de la liaison d'une colonne. Si vous nous faites savoir comment vous voulez l'afficher alors nous pourrions être en mesure de vous aider. – Josh

+0

A toString() de l'objet. – Greens

+0

J'ai révisé ma réponse pour fournir une solution [pas très élégante] à votre problème. –

Répondre

0

Edit: mis à jour pour appeler une méthode dans le code sous-jacent pour générer les balises html pour la collection.

Dans votre balisage ASPX vous pourriez avoir quelque chose comme ce qui suit:

<asp:GridView ID="myGridView" AutoGenerateColumns="False" runat="server"> 
     <Columns> 
      <asp:BoundField HeaderText="Item Name" DataField="Name" /> 
      <asp:TemplateField HeaderText="Collection Field"> 
       <ItemTemplate> 
        <%# ((_Default)Page).GetHtmlForList(DataBinder.Eval(Container.DataItem, "List"))%> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

alors dans votre code derrière vous pourriez avoir quelque chose comme ceci:

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      myGridView.DataSource = GetCollection(); 
      myGridView.DataBind(); 
     } 
    } 

    public string GetHtmlForList(object value) 
    { 
     string html = ""; 
     List<string> list = (List<string>)value; 
     foreach (string item in list) 
      html += item + "<br/>"; 
     return html; 
    } 

    private List<MyClass> GetCollection() 
    { 
     List<MyClass> coll = new List<MyClass>(); 
     coll.Add(new MyClass { Name = "First Item", List = new List<string>(new string[] { "1", "2", "3" }) }); 
     coll.Add(new MyClass { Name = "Second Item", List = new List<string>(new string[] { "Apples", "Pears", "Oranges" }) }); 
     coll.Add(new MyClass { Name = "Third Item", List = new List<string>(new string[] { "Red", "Green", "Blue" }) }); 

     return coll; 
    } 
} 

public class MyClass 
{ 
    public string Name { get; set; } 
    public List<string> List { get; set; } 
} 
+0

Une des propriétés de mon objet est une liste . Comment lier le SomeObject dans une colonne? – Greens

+0

Merci beaucoup. – Greens

1

obtenir la collection de l'objet et la lier à l'aide

myGridView.DataSource = myCollection; 
myGridView.DataBind(); 
0

Pourriez-vous pas un répéteur à l'intérieur du Col. template, et simplement lier votre liste dans le RowDataBound?

Questions connexes