ASP.NET 2.0中層次數(shù)據(jù)的處理_.Net教程
推薦:用ASP.NET/C#連接Access和SQL Server數(shù)據(jù)庫連接Access 首先看一個例子代碼片斷: 程序代碼: -------------------------------------------------------------------------------- using System.Data; using System.Data.Ole
數(shù)據(jù)源控件可以同時暴露平面表格式的或層次的數(shù)據(jù)。前面演示的SqlDataSource和ObjectDataSource控件都是平面表格式的數(shù)據(jù)源控件。ASP.NET 2.0還包含兩個層次數(shù)據(jù)源控件:用于連接XML文件的XmlDataSource和用于連接站點導航數(shù)據(jù)的SiteMapDataSource。這一部分將介紹這些控件的使用技術。
TreeView和Menu控件
數(shù)據(jù)綁定控件與數(shù)據(jù)源控件類似,也可以是層次的。表格式數(shù)據(jù)綁定控件顯示數(shù)據(jù)列表或表格,層次數(shù)據(jù)綁定控件能夠用遞規(guī)方式獲取層次數(shù)據(jù),在UI中用父-子關系顯示數(shù)據(jù)。ASP.NET 2.0中的分層數(shù)據(jù)綁定控件的例子有TreeView和Menu控件。下面將介紹把這些控件綁定到層次數(shù)據(jù)源的一些技術,包括很多示例。
綁定到XML
XmlDataSource控件允許其它控件綁定到XML數(shù)據(jù)。XmlDataSource支持DataFile屬性,它被用于指定作為輸入(input)的XML數(shù)據(jù)文件的路徑。你還可以指定TranformFile屬性,給數(shù)據(jù)應用XSLT轉換;設置XPath屬性來指定需要暴露的數(shù)據(jù)源節(jié)點的子集。
下面的例子演示了一個通過XmlDataSource控件綁定到XML文件的TreeView控件。這個TreeView把每個TreeNode對象的屬性與分層樹中的XML節(jié)點的屬性關聯(lián)起來了(為了進行數(shù)據(jù)綁定,XML節(jié)點的屬性都被處理為數(shù)據(jù)項的屬性)。在默認情況下,TreeView控件通過調用對象的ToString()方法簡單地顯示數(shù)據(jù)項。它顯示了XML節(jié)點的元素(element)名稱,這樣你就可以看到TreeView所綁定的節(jié)點層次。它不一定能夠顯示出你所需要的內(nèi)容,但它提供了一個很好的出發(fā)點,未來你將更容易定制XML數(shù)據(jù)的顯示方式。
<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顯示更有意義的內(nèi)容,你可以為樹中的每個節(jié)點指定不同的數(shù)據(jù)綁定。為了定義層次數(shù)據(jù)項的字段如何映射到TreeNode屬性,你可以把TreeNodeBinding對象添加到TreeView的Databindings集合中。TreeNodeBinding的兩個重要屬性決定了如何在層次數(shù)據(jù)項集合上使用綁定。DataMember屬性指定了數(shù)據(jù)項的類型或者XML數(shù)據(jù)中用于綁定的元素名稱。Depth屬性指定了應用于層次樹的數(shù)據(jù)綁定的深度。你可以設置DataMember或Depth,或者兩個屬性都設置。例如,如果要定義XML文件中的所有Book元素的數(shù)據(jù)綁定,只需要把DataMember設置為"Book"。為了定義所有深度為1的節(jié)點的數(shù)據(jù)綁定,只需要把Depth設置為1。如果要定義深度為1的所有Book節(jié)點,需要把TreeNodeBinding對象的DataMember設置為"Book",同時把Depth設置為1。
當你設置了DataMember或Depth用于匹配節(jié)點集合之后,就可以定義TreeNodeDataBinding的另外一些屬性來定制數(shù)據(jù)項的屬性(或XML數(shù)據(jù)中的XML節(jié)點屬性)如何映射到TreeView控件的TreeNode的屬性。例如,TextField屬性定義了顯示為TreeNode文本的屬性名稱;類似地,ValueField屬性定義了作為TreeNode值的數(shù)據(jù)項屬性;NavigateUrlField屬性定義了TreeNode導航鏈接的字段/屬性,等等。你還可以為一個已有數(shù)據(jù)綁定的TreeNode屬性指定靜態(tài)值。例如,指定Book元素的TreeNode使用"Book.gif"圖像、設置DataMember屬性是"Book"的TreeNodeBinding的ImageUrl屬性。
下面的例子演示了一個綁定到XML數(shù)據(jù)的TreeView,數(shù)據(jù)綁定只應用在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屬性,你可以用它來過濾數(shù)據(jù)源所暴露的節(jié)點集合。在下面的例子中,Xpath屬性被設置為Bookstore/genre[@name='Business']/book,以過濾數(shù)據(jù)源的節(jié)點,僅顯示"Business"類型下的book元素。在指定XPath屬性的語法時要特別小心,否則可能出現(xiàn)數(shù)據(jù)源任何節(jié)點都不暴露的情況(相關的數(shù)據(jù)綁定控件也不會顯示)。
<asp:XmlDataSource ID="MySource" DataFile="~/App_Data/Bookstore.xml" XPath="Bookstore/genre[@name='Business']/book" runat="server"/>
請注意,TreeView樹準確地匹配了源XML中的層次。由于這個原因,通常會為了綁定到TreeView而具體構造XML,或者為了綁定到TreeView而使用XSL轉換重新把數(shù)據(jù)構造為適當?shù)姆謱咏Y構。
<asp:XmlDataSource ID="MySource" DataFile="~/App_Data/Bookstore2.xml" TransformFile="~/App_Data/Bookstore2.xsl" XPath="Bookstore/genre[@name='Business']/book" runat="server"/>
把表格式數(shù)據(jù)綁定控件綁定到分層數(shù)據(jù)源也是可行的,但是它只能顯示第一層數(shù)據(jù)。在下面的例子中,模板化的DataList控件綁定到bookstore XML文件。由于數(shù)據(jù)源暴露的頂層節(jié)點是<book/>節(jié)點,DataList可以在自己的ItemTemplate模板中使用Eval數(shù)據(jù)綁定語法綁定到這些節(jié)點的屬性。
<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項目
- asp.net如何得到GRIDVIEW中某行某列值的方法
- .net SMTP發(fā)送Email實例(可帶附件)
- js實現(xiàn)廣告漂浮效果的小例子
- asp.net Repeater 數(shù)據(jù)綁定的具體實現(xiàn)
- Asp.Net 無刷新文件上傳并顯示進度條的實現(xiàn)方法及思路
- Asp.net獲取客戶端IP常見代碼存在的偽造IP問題探討
- VS2010 水晶報表的使用方法
- ASP.NET中操作SQL數(shù)據(jù)庫(連接字符串的配置及獲取)
- asp.net頁面?zhèn)髦禍y試實例代碼
- DataGridView - DataGridViewCheckBoxCell的使用介紹
- asp.net中javascript的引用(直接引入和間接引入)
- 三層+存儲過程實現(xiàn)分頁示例代碼
- 相關鏈接:
- 教程說明:
.Net教程-ASP.NET 2.0中層次數(shù)據(jù)的處理
。