SqlDataSource和ObjectDataSource控件都是平面表格式的数据源控件,操作也相对简单,在这里我就不细说了.
在这里我主要谈下用于连接XML文件的XmlDataSource和用于连接站点导航数据的SiteMapDataSource这两个层次数据源控件中XmlDataSource数据绑定到平面表格控件的一起东东.
XmlDataSource控件允许其它控件绑定到XML数据。XmlDataSource支持DataFile属性,它被用于指定作为输入 (input)的XML数据文件的路径。你还可以指定TranformFile属性,给数据应用XSLT转换;设置XPath属性来指定需要暴露的数据源 节点的子集。
<
asp:XmlDataSource
ID
="myXmlDataSource"
runat
="server"
DataFile
="~/temp.xml"
TransformFile
="~transXml"
XPath
="//User"
></
asp:XmlDataSource
>
表格式数据绑定控件绑定到分层数据源也是可行的,但是它只能显示第一层数据。在下面的demo中,Repeater控件绑定到 temp.xml文件。由于数据源暴露的顶层节点是<User/>节点,Repeater可以在自己的ItemTemplate模板中使用Eval数据绑 定语法绑定到这些节点的属性。
<
asp:Repeater
runat
="server"
ID
="myReater2"
DataSourceID
="myXmlDataSource"
>
<
HeaderTemplate
>
标题
</
HeaderTemplate
>
<
ItemTemplate
>
<
ul
>
<
li
>
姓名:
<%
#
Eval
(
"
Name
"
)
%>
</
li
>
<
li
>
Email:
<%
#
Eval
(
"
Email
"
)
%>
</
li
>
</
ul
>
</
ItemTemplate
>
<
FooterTemplate
></
FooterTemplate
>
</
asp:Repeater
>
除了Eval数据绑定语法之外,ASP.NET 2.0还提供了基于XPath的数据绑定语法,在实现了IXPathNavigable接口的任何数据项上都可以使用它。这里介绍两种常用的表达式类型:
◆XPath(expression, [formatString]) - 根据数据项计算Xpath表达式的值,返回单个值。
◆XPathSelect(expression, [formatString]) - 根据数据项计算Xpath表达式的值,返回节点列表。
下面我们来看看使用Xpath数据绑定方法的优势,通过一个demo来说明.
Repeater的ItemTemplate模板另外增加了一个Repeater,并把这个内部Repeater的属性绑定到一个描述当前User节点的 Reply子节点的XPathSelect表达式。在内部Repeater的ItemTemplate模板中,Xpath数据绑定表达式根据这些 "Reply"内容节点来计算值。ASP.NET 2.0利用这种技术,使你能够通过组合表格式数据绑定控件简便地构造出丰富的、分层的数据显示方式。
<
asp:Repeater
runat
="server"
ID
="myRpeater"
DataSourceID
="myXmlDataSource"
>
<
HeaderTemplate
><
ul
>
标题
</
HeaderTemplate
>
<
ItemTemplate
>
<
li
>
ID:
<%
# XPath(
"
@ID
"
)
%>
</
li
>
<
li
>
姓名:
<%
#XPath(
"
Name
"
)
%>
</
li
>
<
li
>
Email:
<%
#XPath(
"
Email
"
)
%>
</
li
>
<
li
>
Content:
<%
#XPath(
"
Content
"
)
%>
</
li
>
<
li
>
<
asp:Repeater
runat
="server"
ID
="childRepeater"
DataSource
='<%#
XPathSelect("Reply") %
>
'>
<
HeaderTemplate
><
ul
>
留言
</
HeaderTemplate
>
<
ItemTemplate
>
<
ul
>
<
li
>
ReplyID:
<%
#XPath(
"
ID
"
)
%>
</
li
>
<
li
>
Time:
<%
# XPath(
"
Time
"
)
%>
</
li
>
<
li
>
Content:
<%
# XPath(
"
Content
"
)
%>
</
li
>
</
ul
>
</
ItemTemplate
>
<
FooterTemplate
></
ul
></
FooterTemplate
>
</
asp:Repeater
>
</
li
>
</
ItemTemplate
>
<
FooterTemplate
></
ul
></
FooterTemplate
>
</
asp:Repeater
>