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

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

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

  数据源控件可以同时暴露平面表格式的或层次的数据。前面演示的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、JSP及PHP之间的抉择
由于我常接是ASP、JSP及PHP的项目,所以正开始写一系列的文章来比较它们之间的差别,当我写到一半时,ASP 被宣布了,所以我不得不重新开始审视这个问题。我正在同时做一个JSP项目和一个ASP项目

共3页上一页123下一页
来源:模板无忧//所属分类:.Net教程/更新时间:2008-08-22
相关.Net教程