2009-03-23 9 views
35

J'essaye de lier un List<AreaField> à un répéteur. Je l'ai converti la liste dans un tableau en utilisant la méthode ToArray() et maintenant un tableau de AreaField[]Liaison d'une liste générique à un répéteur - ASP.NET

Voici ma hiérarchie de classes

public class AreaFields 
{ 
    public List<Fields> Fields { set; get; } 
} 

public class Fields 
{ 
    public string Name { set; get; } 
    public string Value {set; get; } 
} 

Dans le ASPX, je voudrais lier un répéteur (quelque chose comme ce)

DataBinder.Eval(Container.DataItem, "MyAreaFieldName1") 

le MyAreaFieldName1 est la valeur de la propriété Name dans la classe AreaFieldItem.

Répondre

22

Vous voudrez peut-être créer un subRepeater.

<asp:Repeater ID="SubRepeater" runat="server" DataSource='<%# Eval("Fields") %>'> 
    <ItemTemplate> 
    <span><%# Eval("Name") %></span> 
    </ItemTemplate> 
</asp:Repeater> 

Vous pouvez également jeter vos champs

<%# ((ArrayFields)Container.DataItem).Fields[0].Name %> 

Enfin vous pouvez faire une petite fonction CSV et écrivez vos champs avec une fonction

<%# GetAsCsv(((ArrayFields)Container.DataItem).Fields) %> 

public string GetAsCsv(IEnumerable<Fields> fields) 
{ 
    var builder = new StringBuilder(); 
    foreach(var f in fields) 
    { 
    builder.Append(f); 
    builder.Append(","); 
    } 
    builder.Remove(builder.Length - 1); 
    return builder.ToString(); 
} 
+4

runat = "SubRepeater"?!? - qui défie tout ce que je comprends (ou pense que je comprends) à propos de l'attribut runat. – Hardryv

+0

Votre code de sous-répéteur en l'état donne une erreur d'analyseur, il doit s'agir de guillemets simples: DataSource = '<% # Eval ("Fields")%>'. –

62

Il est étonnamment simple ...

Code derrière:

// Here's your object that you'll create a list of 
private class Products 
{ 
    public string ProductName { get; set; } 
    public string ProductDescription { get; set; } 
    public string ProductPrice { get; set; } 
} 

// Here you pass in the List of Products 
private void BindItemsInCart(List<Products> ListOfSelectedProducts) 
{ 
    // The the LIST as the DataSource 
    this.rptItemsInCart.DataSource = ListOfSelectedProducts; 

    // Then bind the repeater 
    // The public properties become the columns of your repeater 
    this.rptItemsInCart.DataBind(); 
} 

Code ASPX:

<asp:Repeater ID="rptItemsInCart" runat="server"> 
    <HeaderTemplate> 
    <table> 
     <thead> 
     <tr> 
      <th>Product Name</th> 
      <th>Product Description</th> 
      <th>Product Price</th> 
     </tr> 
     </thead> 
     <tbody> 
    </HeaderTemplate> 
    <ItemTemplate> 
    <tr> 
     <td><%# Eval("ProductName") %></td> 
     <td><%# Eval("ProductDescription")%></td> 
     <td><%# Eval("ProductPrice")%></td> 
    </tr> 
    </ItemTemplate> 
    <FooterTemplate> 
    </tbody> 
    </table> 
    </FooterTemplate> 
</asp:Repeater> 

J'espère que cela aide!

+6

Ceci devrait être marqué comme la bonne réponse. – TheGeekZn

+0

PS: struct peut être utilisé à la place de la classe. – dvdmn

+1

C'est génial. Notez que le modèle En-tête et pied de page n'est pas nécessaire s'ils ne sont pas modélisés. Cela rendra l'analyse html d'ouverture et de fermeture plus propre si vous les placez en tant que html brut avant et après le répéteur. – kns98

6

code Derrière:

public class Friends 
{ 
    public string ID  { get; set; } 
    public string Name { get; set; } 
    public string Image { get; set; } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
     List <Friends> friendsList = new List<Friends>(); 

     foreach (var friend in friendz) 
     { 
      friendsList.Add(
       new Friends { ID = friend.id, Name = friend.name }  
      ); 

     } 

     this.rptFriends.DataSource = friendsList; 
     this.rptFriends.DataBind(); 
} 

.aspx page

<asp:Repeater ID="rptFriends" runat="server"> 
      <HeaderTemplate> 
       <table border="0" cellpadding="0" cellspacing="0"> 
        <thead> 
         <tr> 
          <th>ID</th> 
          <th>Name</th> 
         </tr> 
        </thead> 
        <tbody> 
      </HeaderTemplate> 
      <ItemTemplate> 
        <tr> 
         <td><%# Eval("ID") %></td> 
         <td><%# Eval("Name") %></td> 
        </tr> 
      </ItemTemplate> 
      <FooterTemplate> 
        </tbody> 
       </table> 
      </FooterTemplate> 
     </asp:Repeater> 
-1

Vous devez utiliser la méthode ToList(). (Ne pas oublier l'espace de noms System.Linq)

ex .:

IList<Model> models = Builder<Model>.CreateListOfSize(10).Build(); 
List<Model> lstMOdels = models.ToList(); 
Questions connexes