扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
<asp:XmlDataSource ID="MySource" DataFile="~/App_Data/Bookstore.xml" runat="server"/> <asp:TreeView ID="TreeView1" SkinId="Bookstore" DataSourceId="MySource" ExpandDepth="3" MaxDataBindDepth="3" runat="server" /> |
<Databindings> <asp:TreeNodeBinding DataMember="Bookstore" Text="Bookstore" ImageUrl="~/images/xp/folder.gif" /> <asp:TreeNodeBinding DataMember="genre" TextField="name" ImageUrl="~/images/xp/folder.gif" /> </Databindings> |
<asp:XmlDataSource ID="MySource" DataFile="~/App_Data/Bookstore.xml" XPath="Bookstore/genre[@name='Business']/book" runat="server"/> |
<asp:XmlDataSource ID="MySource" DataFile="~/App_Data/Bookstore2.xml" TransformFile="~/App_Data/Bookstore2.xsl" XPath="Bookstore/genre[@name='Business']/book" runat="server"/> |
<asp:DataList id="MyDataList" DataSourceId="MySource" runat="server"> <ItemTemplate> <img alt="Cover Image" src='<%#"images/" + Eval("ISBN") + ".gif"%>'> <%# Eval("Title") %> ISBN: <%# Eval("ISBN") %> Price: <%# Eval("Price") %> </ItemTemplate> </asp:DataList> |
虽然只显示一层也是有用的,但是如果能够用嵌套的表格式数据绑定控件来显示下面的层次应该会更好。幸运的是,ASP.NET 2.0允许你实现这种功能。除了Eval数据绑定语法之外,ASP.NET 2.0还提供了基于XPath的数据绑定语法,在实现了IXPathNavigable接口的任何数据项上都可以使用它。有两种可用的表达式类型:
· XPath(expression, [formatString]) - 根据数据项计算Xpath表达式的值,返回单个值。
· XPathSelect(expression, [formatString]) - 根据数据项计算Xpath表达式的值,返回节点列表。
下面的例子是建立在前面的例子基础之上的,它用Xpath数据绑定表达式代替Eval表达式绑定到book节点的属性。从表面上看,这样的操作与每个表达式的"@"前缀相比没有什么更多功能,只是用于引用节点属性的Xpath语法。但是,Xpath的真正灵活性就是依赖于这种引用层次中的任意项(不仅仅是属性)的能力的。
这个示例给外部DataList的ItemTemplate模板另外增加了一个DataList,并把这个内部DataList的属性绑定到一个描述当前book节点的chapter子节点的XPathSelect表达式。在内部DataList的ItemTemplate模板中,Xpath数据绑定表达式根据这些"chapter"内容节点来计算值。ASP.NET 2.0利用这种技术,使你能够通过组合表格式数据绑定控件简便地构造出丰富的、分层的数据显示方式。
<asp:DataList id="MyDataList" DataSourceId="MySource" runat="server"> <ItemTemplate> <img alt="Cover Image" src='<%# "images/" + XPath("@ISBN") + ".gif" %>'> <%# XPath("@Title") %> ISBN: <%# XPath("@ISBN") %> Price: <%# XPath("@Price") %> <asp:DataList id="MyDataList" DataSource='<%# XPathSelect("chapter") %>' runat="server"> <ItemTemplate> Chapter <%# XPath("@num") %>: <%# XPath("@name") %> <%# XPath(".") %> </ItemTemplate> </asp:DataList> </ItemTemplate> </asp:DataList> |
Sub MyTreeView_SelectedNodeChanged(sender As Object, e As EventArgs) Dim path As String = MyTreeView.SelectedNode.DataPath MyDetailsSource.XPath = path MyDataList.DataSource = MyDetailsSource MyDataList.DataBind() End Sub |
<asp:SiteMapDataSource ID="SiteMapSource" runat="server"/> <asp:TreeView ID="MyTreeView" SkinId="BulletedList3" DataSourceId="SiteMapSource" runat="server"> <Databindings> <asp:TreeNodeBinding TextField="Title" NavigateUrlField="Url" /> </Databindings> </asp:TreeView> |
绑定到关系数据库
当关系数据库中的多个表通过外部键相关联的时候,也可以用层次结构来表现。例如,在产品数据库中,产品与产品类别关联,它们就可以用类别和产品之间的层次(1对多)关系来表现。尽管当前的ASP.NET版本没有包含一个用于把关系数据显示为层次结构的控件,你仍然可以通过编程填充层次的数据绑定控件(例如TreeView或Menu)的节点/数据项来实现这种目的。下面的例子显示了一个用关系数据库填充的TreeView控件。这个例子利用TreeView的PopulateOnDemand特性,按需求(客户端上扩展某个TreeNode的时候)来填充子节点。
Sub GetProductCategories(ByVal node As TreeNode) Dim categories As CategoryList = WarehouseDB.GetProductCategories() Dim c As Category For Each c In categories Dim newNode As TreeNode = New TreeNode(c.Name, c.Id) newNode.SelectAction = TreeNodeSelectAction.Expand newNode.PopulateOnDemand = True node.ChildNodes.Add(newNode) Next End Sub Sub GetProductsForCategory(ByVal node As TreeNode) Dim categoryId As String = node.Value Dim products As ProductList = WarehouseDB.GetProductsForCategory(categoryId) Dim p As Product For Each p In products Dim newNode As TreeNode = New TreeNode(p.Name, p.Id) node.ChildNodes.Add(newNode) Next End Sub Sub PopulateNode(ByVal source As Object, ByVal e As TreeNodeEventArgs) Select Case e.Node.Depth Case 0 GetProductCategories(e.Node) Case 1 GetProductsForCategory(e.Node) End Select End Sub <asp:TreeView ID="TreeView1" OnTreeNodePopulate="PopulateNode" SkinId="Simple" Width="250" ExpandDepth="0" runat="server"> <Nodes> <asp:TreeNode Text="Inventory" SelectAction="Expand" PopulateOnDemand="true"/> </Nodes> </asp:TreeView> |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者