ASP.NET 2.0中层次数据的处理(2)_.Net教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:用ASP.NET/C#连接Access和SQL Server数据库
连接Access 首先看一个例子代码片断: 程序代码: -------------------------------------------------------------------------------- using System.Data; using System.Data.Ole

  虽然只显示一层也是有用的,但是如果能够用嵌套的表格式数据绑定控件来显示下面的层次应该会更好。幸运的是,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>

  为了处理数据绑定控件对特定位置的节点的请求,XmlDataSource等层次数据源控件让层次中的每个节点与唯一的路径相对应。这样就带来了一些特性,例如TreeView的按需求填充(PopoulateOnDemand)特性,当某个节点被扩展的时候,来自数据源的节点才被发送到客户端,而不是一次性地发送所有的节点。它也允许你在页面代码中用这种方式配置数据源来显示特定位置的节点。不同的数据类型的路径语法是不同的,而且不能在代码中构造。但是,你可以使用TreeNode的DataPath属性来访问绑定到TreeView的节点的数据路径。由于XmlDataSource把Xpath表达式作为自己的数据路径语法,这些路径也可以指定给XmlDataSource的Xpath属性来进行节点列表的过滤。下面的例子演示了 这种技术,它使用XmlDataSource实现了一个主-从表。例子中有两个XmlDataSource控件,其中一个绑定到TreeView(主表控件),另一个绑定到DataList(从表控件)。当用户点击TreeView节点的时候,就检索它的DataPath属性,并把它赋予绑定到DataList的XmlDataSource控件,以显示被点击的节点的详细信息。

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
  绑定到站点导航数据(Site Navigation)

  站点导航数据是ASP.NET中的另外一种层次数据。ASP.NET 2.0不仅支持使用ASP.NET中的站点导航API编程访问站点地图数据,还支持使用SiteMapDataSource控件进行宣告式的数据绑定。当你把TreeView(或Menu)控件绑定到SiteMapDataSource的时候,站点地图的Text和Url属性可以绑定到TreeNode(或MenuItem)。尽管你可以用一个数据绑定集合来建立这种绑定,但是这样的操作不是必要的。TreeView和 Menu控件自动地把TreeNode或 MenuItem的Text和NavigateUrl属性绑定到相关的站点地图属性(这是使用SiteMapNode的INavigateUIData接口实现的)。当TreeView和Menu绑定到SiteMapDataSource的时候,它们还有一个特性,会自动地把SelectedNode或SelectedItem属性设置为站点地图中的当前节点。

分享:ASP.NET、JSP及PHP之间的抉择
由于我常接是ASP、JSP及PHP的项目,所以正开始写一系列的文章来比较它们之间的差别,当我写到一半时,ASP 被宣布了,所以我不得不重新开始审视这个问题。我正在同时做一个JSP项目和一个ASP项目

来源:模板无忧//所属分类:.Net教程/更新时间:2008-08-22
相关.Net教程