在ASP.NET中開發(fā)樹狀結構
在網頁中用樹狀結構顯示數(shù)據既清晰又簡單,用戶非常需要。本文從實際應用的角度,介紹了在ASP.NET中使用TreeView控件來創(chuàng)建樹狀結構的幾種具體方法,可以方便地建立靜、動態(tài)樹狀結構,較好地解決了樹狀結構在生成無限層次不定數(shù)量節(jié)點時非常困難而且容易出錯的問題。
一、引言
在網頁開發(fā)工具ASP.NET的應用中,用戶經常希望用樹狀控件來顯示分類或層次數(shù)據,這樣既簡單又直觀,但是ASP.NET本身沒有提供此控件。當然程序員可以用ImageButton和Label等組成的用戶控件和XML、XSL語言自己進行編寫,它們可以顯示有限層次少量節(jié)點的樹狀,但要生成無限層次不定數(shù)量的節(jié)點時就難以實現(xiàn)并且非常容易出錯。
作者通過對Microsoft下TreeView控件大量的實際應用,可以非常方便地實現(xiàn)任何類型的樹狀結構,較好地解決了上述問題。
二、安裝 TreeView控件、導入命名空間
在你的Web程序使用TreeView控件之前,首先必須下載Internet Explorer WebBrower controls到你的開發(fā)機器上,然后導入命名空間?稍L問以下網址下載:
下載后,再根據它的幫助文檔進行一些必要的設置。
在成功下載并設置了之后,就可以開始使用TreeView控件。記。涸诿總使用它的程序頁面的開頭都要導入它的命名空間:
<%@ Import namespace="Microsoft.Web.UI.WebControls" %>
TagPrefix="mytree" NameSpace="Microsoft.Web.UI.WebContro-ls" Assembly="Microsoft.Web.UI..WebControls,Version=1.0.2.226,Culture=neu-tral,PublicKeyToken=31bf3856ad364e35" %>
三、三種方式添加節(jié)點,創(chuàng)建靜態(tài)樹
開發(fā)樹狀結構要定義一個TreeView控件,筆耕論文新浪博客,并向其中添加所需的Treenode節(jié)點。向TreeView控件中添加節(jié)點的方法有三種:
1、 在頁面中創(chuàng)建:
所有的WebControls都要放在form中,Treeview當然也不例外:
<body>
<form runat="server">
<mytree:treeview id="treeview1" runat="server">
<mytree:treenode text="first node"/>
</mytree:treeview>
</form>
</body>
以上的語句創(chuàng)建了具有一個節(jié)點first node、名為treeview1的樹。
2、在程序代碼中創(chuàng)建:
public void Page_Load(object sender,EventArgs e)
{
if(!Page.IsPostBack)
{
TreeNode snode=new TreeNode();
snode.Text="second node";
treeview1.Nodes.Add(snode);
}
}
這樣就為上例的treeview1又創(chuàng)建一個節(jié)點second node,Add方法是在樹的最后添加節(jié)點。生成的結構
3、從XML中導入:
在TreeView控件中設定treenodesrc屬性的值為numtree.xml:
<mytree:treeview id="treeview1" runat="server" treenodesrc="numtree.xml"/>
說明當生成樹狀控件時會自動從numtree.xml中讀取樹的節(jié)點內容,numtree.xml文件如下:
<?XML version="1.0" encoding="utf-8" ?>
<treenodes>
<treenode text="first node"/>
<treenode text="second node"/>
</treenodes>
生成的樹狀結果同上面的例子相同
四、方便快捷地創(chuàng)建動態(tài)樹
以上方法產生的樹都是靜態(tài)的,即使是從XML中導入,它的節(jié)點數(shù)目也是一定的。當我們要將數(shù)據庫中的數(shù)據用樹狀結構表現(xiàn)出來時,并不知道這個樹的層次和節(jié)點數(shù),就需要在TreeView控件中動態(tài)地添加樹節(jié)點。例如用樹狀結構表現(xiàn)一個公司有許多部門,部門下有員工。部門的數(shù)據放在表dept中(包含字段deptid和deptname),部門和員工的對應關系放在表deptperson中(包含字段deptid、personid和personname),并且這些字段都是string類型,這兩個表放在數(shù)據庫mydb.mdb中。這里添加節(jié)點的方法也有幾種,在此介紹的方法是在頁面加載時生成部門節(jié)點,當點擊部門前的擴展圖標按鈕后再生成部門下的人員子節(jié)點。
在頁面中寫入:
<mytree:treeview id="tr1" runat="serve" onexpand="treeview1_Expand"/>
在<script Language="c#" runat="server"></script>中加入如下代碼:
OleDbConnection myconn;
public void Page_Load(Object sender,EventArgs e)
// 在頁面加載時生成部門節(jié)點
{
string strmyconn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Serve-r.MapPath(".")+"..\\DataBase\\mydb.mdb";
myconn=new OleDbConnection(strmyconn);
myconn.Open();
if(!Page.IsPostBack)
{
string strdept="select * from dept";
OleDbCommand mycomm=new OleDbCommand(strdept,myconn)
OleDbDataReader mydr=mycomm.ExecuteReader();
//用DataReader讀取部門表中的數(shù)據
while(mydr.Read())
{
TreeNode tmpnode=new TreeNode();
tmpnode.Text=mydr["deptname"].ToString();
tmpnode.NodeData=mydr["deptid"].ToString();
tmpnode.Expandable=ExpandableValue.CheckOnce;
treeview1.Nodes.Add(tmpnode);
}
mydr.Close();
}
}
點擊擴展圖標按鈕觸發(fā)的事件treeview1_Expand的代碼是:
public void treeview1_Expand(object sender,Microsoft.Web.UI.WebControls.Tr-eeViewClickEventArgs e)
{
TreeNode deptnode=((Microsoft.Web.UI.WebControls.TreeView)sender).Nodes[(int.Par-se(e.Node))];
if(deptnode.Nodes.Count==0)
{
string strperson="select deptperson.personname from deptperson,dept whe-re dept.deptid=deptperson.deptid and dept.deptid='"+deptnode.NodeData.T-oString()+"'";
OleDbCommand mycomm1=new OleDbCommand(strperson,myconn);
OleDbDataReader mydr1=mycomm1.ExecuteReader();
while(mydr1.Read())
{
TreeNode personnode=new TreeNode();
personnode.Text=mydr1["personname"].ToString();
deptnode.Nodes.Add(personnode);
}
mydr1.Close();
}
}
使用同樣的方法和原理,我們可以創(chuàng)建比這更為復雜的樹結構。TreeView控件還有許多其他的屬性和事件,象ChildType,SelectedStyle,imageurl和onselectedindexchang等,利用這些屬性不但可以美化樹狀結構的外觀,而且還可以更好的滿足你的使用要求。
五、結論:
在上面的使用中,我們可以看出TreeView控件在生成樹狀結構方面具有強大功能,與其他編寫自定義用戶控件和利用XML的方法相比較,它提供的用可擴展的樹狀結構來顯示層次數(shù)據方法更加方便、實用和有效,而且出錯率非常低。隨著對TreeView控件深入的研究,我們也會不斷地發(fā)現(xiàn)它的更多的有用的方法和功能。
電工高級技師論文
本文編號:6513
本文鏈接:http://www.lk138.cn/kejilunwen/jisuanjikexuelunwen/6513.html