XmlDataSource
XML 数据通常用于表示半结构化或层次化数据。使用 XML 文档作为数据源,可以从其他资源(例如,其他公司或现有应用程序)接收 XML 文档,并将 XML 数据格式化,以便与应用程序兼容。
要配置一个 System.Web.UI.WebControls.XmlDataSource,必须指定 XML 文件的路径,如果 XML 需要传输数据,则还需指定 XSLT 样式表路径或 XPath 查询路径(可选)。
<asp:XmlDataSource ID="XmlDataSource1" Runat="server" DataFile="~/xml/fruits.xml"> </asp:XmlDataSource>
XMLDataSource 特别适用于拥有层次结构的控件,例如,树视图或数据列表。
<asp:TreeView
ID="TreeView1"
Runat="server"
DataSourceID="XmlDataSource1"
ShowLines="True">
</asp:TreeView>
以上两个列表说明了如何声明性地配置一个 XmlDataSource 和一个 TreeView 控件,使之呈现如图 2 所示的 XML 层次结
构。
图 2. TreeView 控件
TreeView 控件自动生成标记来创建一个用户界面,支持用户单击父实体时展开节点。TreeView 控件通过 XMLDataSource 绑定到 fruits.xml 文件。
SiteMapDataSource
System.Web.UI.WebControls.SiteMapDataSource 控件能够在逻辑上(而非物理上)实现 Web 站点的导航。通过生成一个逻辑结构,导航不受文件物理地址变动的影响。即使页面物理位置改变,您也不必更改应用程序的导航结构。
要使用 SiteMapDataSource,第一步是创建一个 XML 文件来映射 SiteMapNode 元素的层次结构,从而指定站点的导航结构。您可以将 XML 文件保存为 app.sitemap。
当您在应用程序中使用 SiteMapDataSource 时,它将查找指定的 app.sitemap 文件。然后,SiteMapDataSource 连接到导航控件,实现逻辑导航。

图 3. Home-> Articles-> Article 2 页面的详细路经跟踪
数据绑定
一旦创建了一个数据源,接下来是将数据源连接到一个控件。这里的“连接”就是所谓的数据绑定。ASP.NET v1.x 提供了一些数据绑定控件,例如 DataGrid、DataList 和 DropDownList 等。ASP.NET 2.0 对改进数据绑定控件的概念作出了几个重要的创新:
|
1. |
现在,当数据绑定控件绑定到一个数据源控件(通过 DataSourceID 属性)时,能够自动绑定本身。这使页面开发人员无需了解页面的生存周期,并且不必在此时显式调用 DataBind()。数据绑定控件能够自动完成这些工作,甚至能侦听数据源的更改事件。 |
|
2. |
ASP.NET 2.0 引入了新的数据绑定控件,这些控件能自动使用数据源的功能,例如排序、分页、更新、插入和删除。 |
在 ASP.NET v1.x 中,页面开发人员需要手动处理数据绑定控件事件,编写代码来执行这些操作。而在 ASP.NET 2.0 中,数据绑定控件直接使用数据源的功能。当然,页面开发人员仍能处理适当的事件以自定义这些操作的处理;例如,验证输入。
ASP.NET 2.0 支持多种不同控件丰富的数据绑定。例如,能够将一个 XML 数据源绑定到 <ASP:DropDownList>、<ASP:DataList>、<ASP: GridView> 以及许多其他的数据控件。
ASP.NET 2.0 中的数据绑定
传统的应用程序需要编写代码来绑定数据。例如,要在传统的 ASP 中填充下拉列表,或对页面中的值进行硬编码(如下所示),或编写代码来连接数据库,检索数据,再填充下拉列表。如果手动填充下拉列表,则每次更新数据时,必须更改代码(手动)。
<select size="1" name="dropdown_menu"> <option value="1" >test_data1</option> <option value="2">test_data2</option> <option value="3">test_data3</option> <option value="4">test_data4</option> </select>
如果通过访问数据库表的方式填充列表,则不仅需要编写代码来检索信息,而且每次加载页面时,应用程序都需要访问数据库,或在应用程序级或会话级缓存信息。
另一方面,ASP.NET 1.1 允许将控件绑定到数据库表和 XML 文档。但是,在 ASP.NET 1.1 中,如果要绑定到一个 XML 数据源,需要将 XML 转换为 DataSet(本文前面作过概述)。一旦获得转换后的 DataSet,只要将 DataSet 绑定到控件上即可。
//C# code listbox.DataSource= dataset.Tables[0]; listbox.DataTextField = "Name"; listbox.DataValueField = "ID"; listbox.DataBind() //VB Code listbox.DataSource= dataset.Tables(0) listbox.DataTextField = "Name" listbox.DataValueField = "ID" listbox.DataBind()
但是,每此更新 XML 数据源,必须重新将控件绑定到一个新的 DataSet,这是因为 DataSet 不能动态地连接到源文件。
在 ASP.NET 2.0 中绑定控件
ASP.NET 2.0 允许将下拉列表绑定到 XML 数据源或数据库,而无需编写任何代码。如果更新基础数据,它能够确保缓存值自动刷新。
要绑定控件,首先需要创建一个数据源。可以手动编写数据源定义代码,或使用 Configure Data Source Wizard。

图 4a.配置 ObjectDataSource 向导
图 4b.配置 XmlDataSource 向导
XMLDataSource 配置向导在 Web.config 文件中生成了下面的代码。
<asp:xmldatasource id="XmlDataSource1" datafile="msdn.xml" xpath="rss/channel/item" runat="server" />
一旦建立了数据源,就能够将数据绑定到控件。下列代码显示如何将 XML 数据源绑定到下拉列表控件。
<asp:dropdownlist id="DropDownList1" runat="server" datatextfield="state" datasourceid="XMLDataSource1" autopostback="true" />
请注意,ASP.NET 1.x 和 ASP.NET 2.0 中数据绑定的主要区别在于提供程序模型是否自动同步发生了更改的数据。换句话说,由于在数据源中置入了一个事件模型,如果修改支持数据源的数据,则自动更新绑定控件。