2009-03-23 5 views
35

Ich versuche, eine List<AreaField> an einen Repeater zu binden. I umgewandelt haben die Liste in ein Array von der ToArray() Methode und haben jetzt eine Reihe von AreaField[]Binden einer generischen Liste an einen Repeater - ASP.NET

Hier ist meine Klassenhierarchie

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

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

Im aspx, würde Ich mag es, einen Repeater binden (so etwas wie dieser)

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

der MyAreaFieldName1 ist der Wert der Eigenschaft Namen in der AreaFieldItem Klasse.

Antwort

22

Sie können einen subRepeater erstellen.

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

können Sie auch Ihre Felder werfen

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

Schließlich könnte man ein wenig CSV Funktion tun und schreiben Sie Ihre Felder mit einer Funktion

<%# 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" (Mach dir um System.Linq Namespace nicht vergessen)?!? - Das widerspricht allem, was ich über das Runattribut verstehe (oder denke, dass ich es verstehe). – Hardryv

+0

Ihr Sub-Repeater-Code wie er ist, gibt einen Parser-Fehler, sollte einfache Anführungszeichen sein: DataSource = '<% # Eval ("Felder")%>'. –

62

Es ist überraschend einfach ...

Hinterer Code:

// 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(); 
} 

ASPX Code:

<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> 

Ich hoffe, das hilft!

+6

Dies sollte als die richtige Antwort markiert werden. – TheGeekZn

+0

PS: struct kann anstelle der Klasse verwendet werden. – dvdmn

+1

Das ist großartig. Beachten Sie, dass die Header- und Footer-Vorlage nicht benötigt werden, wenn sie nicht auf Vorlagen basieren. Wird das Öffnen und Schließen von HTML-Dateien sauberer machen, wenn Sie diese als Roh-HTML vor und nach dem Repeater setzen. – kns98

6

-Code Behind:

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 Seite

<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

Sie sollten ToList() -Methode verwenden.

ex .:

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