以前,在web頁面中如果想使用樹形控件的話,往往會有些麻煩,有時甚至要自己寫代碼來達到用樹形列表顯示數(shù)據的目的。在asp.net中,我們可以很方便地使用由微軟提供的internet exploer web controls控件來實現(xiàn)樹形列表。在微軟提供的這套internet exploere web controls控件集合中,包括有multipage,tabstrip,toolbar,treeview控件。在這篇文章中,我們來看在asp.net中如何使用treeview控件和xml來實現(xiàn)樹形列表。
微軟的這套控件可以在http://asp.net/iewebcontrols/download.aspx?tabindex=0&tabid=1中下載,下載后運行setup安裝就可以了。現(xiàn)在我們來試下用treeview控件做個簡單的例子。
在vs.net中新建一個web工程,之后在工具箱中,鼠標右鍵彈出的菜單中,選擇“添加新項”,在自定義工具箱中,選擇treeview控件(注意選擇的是命名空間為microsoft internet exploere web control的命名空間),按確定后,就可以在工具箱中出現(xiàn)treeview控件了。
接著,將treeview控件拖拉到窗體中,切換到html視圖,這時會發(fā)現(xiàn)有如下代碼:
<%@ register tagprefix="ie"
namespace="microsoft.web.ui.webcontrols"
assembly="microsoft.web.ui.webcontrols" %>
當然,你可以改變tagprefix的標記值,比如,改為foobar,那么以后在引用treeview控件時,就用如下方式引用:
<foobar:treeview runat="server" ... />
現(xiàn)在,我們可以通過點選treeview控件的屬性框中的nodes屬性,來為該樹添加各類結點了,由于比較簡單,這里不詳細講述。下面是添加完各類結點后的代碼:
<form runat="server">
<ie:treeview runat="server">
<ie:treenode text="isaac gibson" expanded="true">
<ie:treenode text="birth - 1766" />
<ie:treenode text="death - 1827" />
<ie:treenode text="spouse">
<ie:treenode text="ritty gibson" />
<ie:treenode text="married 1789" />
<ie:treenode text="children">
<ie:treenode text="phoebe gibson">
<ie:treenode text="birth - 1790" />
<ie:treenode text="death - 1884" />
<ie:treenode text="spouse">
<ie:treenode text="james k. mason" />
<ie:treenode text="married 1819" />
</ie:treenode>
</ie:treenode>
<ie:treenode text="john gibson">
<ie:treenode text="birth - 1793" />
<ie:treenode text="death - 1802" />
......
</ie:treenode>
</ie:treeview>
</form>
其中我們特別注意一下expanded="true"中的expanded屬性,該屬性當被設置為true時,則當頁面被裝載時,樹形控件被全部展開。
以上是在設計時,靜態(tài)添加數(shù)據到樹形控件的方法。而由于xml實質上也是以樹形結構來表示數(shù)據的結構,因此,就可以通過使用xml文件綁定到樹形控件的方法,來動態(tài)加載數(shù)據到控件中去,其中有兩種方法可以實現(xiàn):
1)另外寫一個符合treeview格式的xml文件
2)通過xsl將xml進行轉換。
先來看下第一種方法,建一個xml文件作為例子,命名為aspnetbooks.xml:
<?xml version="1.0" encoding="utf-8"?>
<books>
<book price="34.95">
<title>teach yourself active server pages 3.0 in 21 days</title>
<authors>
<author>mitchell</author>
<author>atkinson</author>
</authors>
<year>1999</year>
</book>
<book price="29.95">
<title>designing active server pages</title>
<authors>
<author>mitchell</author>
</authors>
<year>2000</year>
</book>
<book price="34.95">
<title>asp.net: tips, tutorials, and code</title>
<authors>
<author>mitchell</author>
<author>mack</author>
<author>walther</author>
<author>seven</author>
<author>anders</author>
<author>nathan</author>
<author>wahlin</author>
</authors>
<year>2001</year>
</book>
<book price="24.95">
<title>asp unleashed</title>
<authors>
<author>walther</author>
</authors>
<year>1998</year>
</book>
</books>
如果我們使用第一種方法,必須對xml進行重寫,用以下的形式表示,才能綁定到樹形控件中去:
<treenodes>
<treenode text="...">
<treenode text="...">
</treenode>
<treenode text="..." />
...
</treenodes>
就是說,根結點必須是treenodes(大小寫都無所謂),每個子結點必須以<treenode>的形式排列。于是,我們對原來的xml文件改寫為如下的形式:
<?xml version="1.0" encoding="utf-8"?>
<treenodes>
<treenode text="teach yourself active server_u80 ?ages 3.0 in 21 days">
<treenode text="price - $34.95" />
<treenode text="authors">
<treenode text="mitchell" />
<treenode text="atkinson" />
</treenode>
<treenode text="year published - 2000" />
</treenode>
<treenode text="designing active server pages">
<treenode text="price - $29.95" />
<treenode text="authors">
<treenode text="mitchell" />
</treenode>
<treenode text="year published - 2000" />
</treenode>
〈/treenodes>
增加以下代碼:
<form runat="server">
<ie:treeview runat="server">
<ie:treenode runat="server" text="asp.net books" expanded="true" treenodesrc="aspnetbooks.xml" />
</ie:treeview>
</form>
這樣就將該xml文件綁定到樹形控件中去了,運行后可以看到結果:
asp.net books
teach yourself active server pages 3.0 in 21 days
designing active server pages
asp.net: tips, tutorials, and code
programming asp.net
可以看到,使用第一種方法的確比較麻煩,不能對xml的結點進行篩選或者其他操作。而如果使用第二種方法的xsl,則可以根據需要隨時對原來的xml進行格式的控制,十分方便。
在使用xsl時,可以用如下的方法對樹形控件進行綁定:
<form runat="server">
<ie:treeview runat="server">
<ie:treenode runat="server" text="asp.net books" expanded="true"
treenodesrc="aspnetbooks.xml"
treenodexsltsrc="aspbooks.xsl" />
</ie:treeview>
</form>
其中,treenodexsltsrc的屬性中指定要轉換的xsl文件,我們設計的xsl文件如下:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version='1.0'>
<xsl:template match="/books">
<treenodes>
<xsl:for-each select="book">
<treenode>
<xsl:attribute name="text">
<xsl:value-of select="title" />
</xsl:attribute>
<treenode>
<xsl:attribute name="text">
price - $<xsl:value-of select="@price" />
</xsl:attribute>
</treenode>
<treenode text="authors">
<xsl:for-each select="authors/author">
<treenode>
<xsl:attribute name="text">
<xsl:value-of select="text()" />
</xsl:attribute>
</treenode>
</xsl:for-each>
</treenode>
<treenode>
<xsl:attribute name="text">
year published - <xsl:value-of select="year" />
</xsl:attribute>
</treenode>
</treenode>
</xsl:for-each>
</treenodes>
</xsl:template>
</xsl:stylesheet>
在上面的xsl中,我們通過形如:
<xsl:attribute name="text">
<xsl:value-of select="title" />
</xsl:attribute>
的屬性設置,提取xml文件中每個結點的值,將其賦值給予treenode的text屬性中。當然,也可以在xsl中使用xpath等設置要顯示的結點。
運行后,結果同樣與用第一種方法的一樣,能正確顯示樹形控件,而且靈活性比較高。
新聞熱點
疑難解答
圖片精選