推荐:用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项目
新闻热点
疑难解答
图片精选