首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>NET专区>.NET2.0>ASP.NET 2.0中层次数据的处理及其TreeView和Menu控件的应用
ASP.NET 2.0中层次数据的处理及其TreeView和Menu控件的应用
来源: 发布时间:2008-02-23 发布人: 浏览: 人次   字体: [ ]  
数据源控件可以同时暴露平面表格式的或层次的数据。前面演示的SqlDataSource和ObjectDataSource控件都是平面表格式的数据源控件。ASP.NET 2.0还包含两个层次数据源控件:用于连接XML文件的XmlDataSource和用于连接站点导航数据的SiteMapDataSource。这一部分将介绍这些控件的使用技术。

  TreeView和Menu控件

  数据绑定控件与数据源控件类似,也可以是层次的。表格式数据绑定控件显示数据列表或表格,层次数据绑定控件能够用递规方式获取层次数据,在UI中用父-子关系显示数据。ASP.NET 2.0中的分层数据绑定控件的例子有TreeView和Menu控件。下面将介绍把这些控件绑定到层次数据源的一些技术,包括很多示例。

  绑定到XML

  XmlDataSource控件允许其它控件绑定到XML数据。XmlDataSource支持DataFile属性,它被用于指定作为输入(input)的XML数据文件的路径。你还可以指定TranformFile属性,给数据应用XSLT转换;设置XPath属性来指定需要暴露的数据源节点的子集。

  下面的例子演示了一个通过XmlDataSource控件绑定到XML文件的TreeView控件。这个TreeView把每个TreeNode对象的属性与分层树中的XML节点的属性关联起来了(为了进行数据绑定,XML节点的属性都被处理为数据项的属性)。在默认情况下,TreeView控件通过调用对象的ToString()方法简单地显示数据项。它显示了XML节点的元素(element)名称,这样你就可以看到TreeView所绑定的节点层次。它不一定能够显示出你所需要的内容,但它提供了一个很好的出发点,未来你将更容易定制XML数据的显示方式。

<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" />

  为了让TreeView显示更有意义的内容,你可以为树中的每个节点指定不同的数据绑定。为了定义层次数据项的字段如何映射到TreeNode属性,你可以把TreeNodeBinding对象添加到TreeView的Databindings集合中。TreeNodeBinding的两个重要属性决定了如何在层次数据项集合上使用绑定。DataMember属性指定了数据项的类型或者XML数据中用于绑定的元素名称。Depth属性指定了应用于层次树的数据绑定的深度。你可以设置DataMember或Depth,或者两个属性都设置。例如,如果要定义XML文件中的所有Book元素的数据绑定,只需要把DataMember设置为"Book"。为了定义所有深度为1的节点的数据绑定,只需要把Depth设置为1。如果要定义深度为1的所有Book节点,需要把TreeNodeBinding对象的DataMember设置为"Book",同时把Depth设置为1。

  当你设置了DataMember或Depth用于匹配节点集合之后,就可以定义TreeNodeDataBinding的另外一些属性来定制数据项的属性(或XML数据中的XML节点属性)如何映射到TreeView控件的TreeNode的属性。例如,TextField属性定义了显示为TreeNode文本的属性名称;类似地,ValueField属性定义了作为TreeNode值的数据项属性;NavigateUrlField属性定义了TreeNode导航链接的字段/属性,等等。你还可以为一个已有数据绑定的TreeNode属性指定静态值。例如,指定Book元素的TreeNode使用"Book.gif"图像、设置DataMember属性是"Book"的TreeNodeBinding的ImageUrl属性。

  下面的例子演示了一个绑定到XML数据的TreeView,数据绑定只应用在XML层次树的特定元素上。

<Databindings>
 <asp:TreeNodeBinding DataMember="Bookstore" Text="Bookstore" ImageUrl="~/images/xp/folder.gif" />
 <asp:TreeNodeBinding DataMember="genre" TextField="name" ImageUrl="~/images/xp/folder.gif" />
</Databindings>

  XmlDataSource支持XPath属性,你可以用它来过滤数据源所暴露的节点集合。在下面的例子中,Xpath属性被设置为Bookstore/genre[@name='Business']/book,以过滤数据源的节点,仅显示"Business"类型下的book元素。在指定XPath属性的语法时要特别小心,否则可能出现数据源任何节点都不暴露的情况(相关的数据绑定控件也不会显示)。

<asp:XmlDataSource ID="MySource" DataFile="~/App_Data/Bookstore.xml" XPath="Bookstore/genre[@name='Business']/book" runat="server"/>

  请注意,TreeView树准确地匹配了源XML中的层次。由于这个原因,通常会为了绑定到TreeView而具体构造XML,或者为了绑定到TreeView而使用XSL转换重新把数据构造为适当的分层结构。

<asp:XmlDataSource ID="MySource" DataFile="~/App_Data/Bookstore2.xml" TransformFile="~/App_Data/Bookstore2.xsl" XPath="Bookstore/genre[@name='Business']/book" runat="server"/>

  把表格式数据绑定控件绑定到分层数据源也是可行的,但是它只能显示第一层数据。在下面的例子中,模板化的DataList控件绑定到bookstore XML文件。由于数据源暴露的顶层节点是<book/>节点,DataList可以在自己的ItemTemplate模板中使用Eval数据绑定语法绑定到这些节点的属性。

<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>

  为了处理数据绑定控件对特定位置的节点的请求,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

共2页: 上一页 1 [2] 下一页
相 关 文 章   发布商链接
·实现gridview内容打印功能的二法
·gridview表头固定并实现打印到excel...
·重写GridView实现单击行变色的效果代...
·图解ASP.NET下AJAX安装(VS2005下安...
·Gridview控件字段内容过长的解决方法...
·实例解决GridView中弹出对话框并改变...
·Net2.0中使用母版页及其母版页的控件
·为GridView控件添加分页导航条形式代...
·GridView中固定列的两种方法
·DataView对象获取数据行相应列值的两...
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·实例讲解在.net2.0中对config
·包含32种常见的用户输入验证...
·asp.net不使用服务器控件的情
·如何更改单个aspx页面的编码...
·实例讲解如何设置gridview的...
·asp.NET 2.0中引发CSS失效问...
·GridView通过模板列实现第一...
·VS2005利用TreeView控件和递...
·DataView对象获取数据行相应...
·GridView中固定列的两种方法
·为GridView控件添加分页导航...
·Net2.0中使用母版页及其母版...
·实例解决GridView中弹出对话...
·Gridview控件字段内容过长的...
·图解ASP.NET下AJAX安装(VS20...
热 门 文 章
·asp.net(C#)弹出窗口返回值并...
·VS2005利用Excel组件操作Exce...
·AJAX实现无刷新适时显示gridV...
·gridview表头固定并实现打印...
·Js获取radiobuttonlist选中值...
·gridview绑定数据显示的各种...
·ASP.NET中“无法加载 DLL 找...
·asp.net2.0回发或回调参数无...
·asp.net文件下载防止乱码出现...
·实现gridview内容打印功能的...
·图解ASP.NET下AJAX安装(VS20...
·ASP.NET多个用户控件回车提交...
·实例解决GridView中弹出对话...
·gridview空数据源时仍显示表...
·asp.net中GridView每个单元格...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .