Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Binding a generic list to a repeater - ASP.NET

I am trying to bind a List<AreaField> to a repeater. I have converted the list into an array by using the ToArray() method and now have a array of AreaField[]

Here's my class hierarchy

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

In the aspx, I would like to bind it a repeater (something like this)

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

The MyAreaFieldName1 is the value of the Name property in the AreaFieldItem class.

like image 692
DotnetDude Avatar asked Mar 23 '09 16:03

DotnetDude


2 Answers

You may want to create a subRepeater.

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

You can also cast your fields

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

Finally you could do a little CSV Function and write out your fields with a function

<%# 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(); } 
like image 26
bendewey Avatar answered Oct 11 '22 09:10

bendewey


It is surprisingly simple...

Code behind:

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

I hope this helps!

like image 156
Solburn Avatar answered Oct 11 '22 11:10

Solburn