2009-03-23 4 views
35

Я пытаюсь связать List<AreaField> с ретранслятором. Я преобразовал список в массив с помощью метода ToArray() и теперь есть массив 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, я хотел бы связать его повторитель (что-то вроде это)

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

MyAreaFieldName1 является значение свойства Name в классе 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 %> 

Наконец, вы могли бы сделать немного CSV функции и выписывать свои поля с функцией

<%# 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"?!? - что бросает вызов всему, что я понимаю (или думаю, что понимаю) об атрибуте runat. – Hardryv

+0

Ваш код суб-повторителя as-is дает ошибку анализатора, должен быть одинарным кавычком: DataSource = '<% # 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

PS: struct может использоваться вместо класса. – dvdmn

+1

Это замечательно. Обратите внимание, что шаблон заголовка и нижнего колонтитула не нужен, если они не являются шаблонами. Сделает анализ открытия и закрытия html более чистым, если вы поместите их как необработанные html до и после ретранслятора. – 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 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

Вы должны использовать метод ToList(). (Не забывайте о System.Linq имен)

напр .:

IList<Model> models = Builder<Model>.CreateListOfSize(10).Build(); 
List<Model> lstMOdels = models.ToList(); 
Смежные вопросы