我需要一些关于将AJAX TreeView
控件转换为LinkButton
的建议。
为什么?使ASP.NET页面更轻松。目前,当选择Nodes
的{{1}}时,与该节点相关的记录将显示在网格中。这种实现使页面变得沉重。所以我们决定将其更改为TreeView
。
我只想知道我需要做什么,考虑或者这是一个好主意?老实说,无论这是好还是坏,我仍然需要这样做。
我最初的理解是,这会像列表LinkButtons
一样。
答案 0 :(得分:2)
以下答案基于您的评论,并以your other question中提供的答案为基础。
以下示例使用ListView而不是Repeater。 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对象有一个子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 ... Which to choose?