Следующий ответ основан на вашем комментарии и основан на ответе, приведенном в ваш другой вопрос.
В следующем примере вместо Repeater используется ListView. ListView хороши тем, что они дадут вам гораздо больше гибкости по сравнению с Repeater. Более того, как вы можете видеть в примере кода ниже, привязка вложенного / дочернего ListView и привязка вложенного / внучатого ListView может быть выполнена декларативно без какого-либо кода программной части.
Пример того, что даст следующий код
ASPX
<asp:ListView runat="server" ID="lvw">
<LayoutTemplate>
<ul>
<li id="itemPlaceholder" runat="server" />
</ul>
</LayoutTemplate>
<ItemTemplate>
<li>
<asp:LinkButton runat="server" CommandArgument='<%# Eval("Name")%>'><%# Eval("Name")%></asp:LinkButton>
<asp:ListView runat="server" ID="lvw2" DataSource='<%# Eval("Children")%>'>
<LayoutTemplate>
<ul>
<li id="itemPlaceholder" runat="server" />
</ul>
</LayoutTemplate>
<ItemTemplate>
<li><asp:LinkButton runat="server" CommandArgument='<%# Eval("Name")%>'><%# Eval("Name")%></asp:LinkButton>
<asp:ListView runat="server" ID="lvw3" DataSource='<%# Eval("Children")%>'>
<LayoutTemplate>
<ul>
<li id="itemPlaceholder" runat="server" />
</ul>
</LayoutTemplate>
<ItemTemplate>
<li><asp:LinkButton runat="server" CommandArgument='<%# Eval("Name")%>'><%# Eval("Name")%></asp:LinkButton></li>
</ItemTemplate>
</asp:ListView>
</li>
</ItemTemplate>
</asp:ListView>
</li>
</ItemTemplate>
</asp:ListView>
C #
lvw.DataSource = personList;
lvw.DataBind();
Как видите, в коде C # я создал список «Человек» следующим образом. Каждый объект Person имеет список дочерних объектов Person, а каждый дочерний объект Person имеет список дочерних объектов Person. Создавая объекты таким образом, привязка ListView действительно так же проста, как я показал. Используйте объект Person ниже, чтобы запустить быстрый образец, чтобы вы могли убедиться в этом сами.
Объект "Человек"
public class Person
{
public string name { get; set; }
public List<Person> Children { get; set; }
}
Для вашего теста вы можете создать метод Page_Load следующим образом:
protected void Page_Load(object sender, EventArgs e)
{
List<Person> personList = new List<Person>();
Person person1 = new Person() { name = "Child 1" };
Person person2 = new Person() { name = "Child 2" };
List<Person> childPersonList1 = new List<Person>();
childPersonList1.Add(person1);
childPersonList1.Add(person2);
Person person3 = new Person() { name = "Person 1" };
person3.Children = childPersonList1;
personList.Add(person3);
Person person4 = new Person() { name = "Child 3" };
Person person10 = new Person() { name = "Grandchild 1" };
Person person11 = new Person() { name = "Grandchild 2" };
Person person12 = new Person() { name = "Grandchild 3" };
List<Person> grandchildPersonList1 = new List<Person>();
grandchildPersonList1.Add(person10);
grandchildPersonList1.Add(person11);
grandchildPersonList1.Add(person12);
person4.Children = grandchildPersonList1;
Person person5 = new Person() { name = "Child 4" };
List<Person> childPersonList2 = new List<Person>();
childPersonList2.Add(person4);
childPersonList2.Add(person5);
Person person6 = new Person() { name = "Person 2" };
person6.Children = childPersonList2;
personList.Add(person6);
Person person7 = new Person() { name = "Child 5" };
Person person8 = new Person() { name = "Child 6" };
List<Person> childPersonList3 = new List<Person>();
childPersonList3.Add(person7);
childPersonList3.Add(person8);
Person person9 = new Person() { name = "Person 3" };
person9.Children = childPersonList3;
personList.Add(person9);
lvw.DataSource = personList;
lvw.DataBind();
}
См. Следующий вопрос StackOverflow, чтобы узнать больше о различиях между Repeater и ListView: Repeater, ListView, DataList, DataGrid, GridView ... Что выбрать?
person
NakedBrunch
schedule
20.07.2011