2009-03-23 9 views
35

मैं एक पुनरावर्तक के लिए एक List<AreaField> बाध्य करने के लिए कोशिश कर रहा हूँ। मैं AreaField[]एक पुनरावर्तक के लिए एक क्रियाशील सूची बाइंडिंग - ASP.NET

की एक सरणी यहाँ मेरी क्लास पदानुक्रम

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

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

aspx में है ToArray() विधि का उपयोग कर एक सरणी में सूची परिवर्तित कर दिया है और अब है, मैं इसे एक पुनरावर्तक बाध्य करने के लिए चाहते हैं (जैसे कुछ यह)

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

MyAreaFieldName1 AreaFieldItem क्लास में नाम संपत्ति का मूल्य है।

उत्तर

22

आप एक subRepeater बनाना चाह सकते हैं।

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

तुम भी डाल सकता अपने क्षेत्रों

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

अंत में आप एक छोटे से सीएसवी समारोह करते हैं और एक समारोह

<%# 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"?!? - जो रनैट विशेषता के बारे में मैं समझता हूं (या सोचता हूं) समझता हूं। – Hardryv

+0

आपका उप पुनरावर्तक कोड के रूप में है एक पार्सर त्रुटि देता है, एकल उद्धरण होना चाहिए: डेटा स्रोत = '<% # Eval ("फील्ड्स")%>'। –

62

यह आश्चर्यजनक रूप से सरल है के साथ अपने खेतों बाहर लिख सकता है ...

कोड पीछे:

// 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 कोड:

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

मुझे आशा है कि इस मदद करता है!

+6

इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए। – TheGeekZn

+0

पीएस: कक्षा के बजाय संरचना का उपयोग किया जा सकता है। – dvdmn

+1

यह बहुत अच्छा है। ध्यान दें कि यदि वे टेम्पलेट नहीं हैं तो शीर्षलेख और पाद लेख टेम्पलेट की आवश्यकता नहीं है। उद्घाटन बनाने के लिए और एचटीएमएल पार्स को बंद करने और अधिक सफाई से करता है, तो इससे पहले कि आप और पुनरावर्तक के बाद कच्चे एचटीएमएल के रूप में इन डाल देंगे। – kns98

6

पीछे कोड:

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 पृष्ठ

<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

आप ToList() विधि का उपयोग करना चाहिए। (System.Linq नाम स्थान के बारे में मत भूलना)

पूर्व .:

IList<Model> models = Builder<Model>.CreateListOfSize(10).Build(); 
List<Model> lstMOdels = models.ToList(); 
संबंधित मुद्दे