摘要:
在网页中用树状结构显示数据既清晰又简单,用户非常需要。本文从实际应用的角度,介绍了在ASP.NET中使用TreeView控件来创建树状结构的几种具体方法,可以方便地建立静、动态树状结构,较好地解决了树状结构在生成无限层次不定数量节点时非常困难而且容易出错的问题。
关键字:
Treeview控件、命名空间、静态树、动态树
一、引言
在网页开发工具ASP.NET的应用中,用户经常希望用树状控件来显示分类或层次数据,这样既简单又直观,但是ASP.NET本身没有提供此控件。当然程序员可以用ImageButton和Label等组成的用户控件和XML、XSL语言自己进行编写,它们可以显示有限层次少量节点的树状,但要生成无限层次不定数量的节点时就难以实现并且非常容易出错。
作者通过对Microsoft下TreeView控件大量的实际应用,可以非常方便地实现任何类型的树状结构,信捷职称论文写作发表网,较好地解决了上述问题。
二、安装 TreeView控件、导入命名空间
在你的Web程序使用TreeView控件之前,首先必须下载Internet Explorer WebBrower controls到你的开发机器上,然后导入命名空间。可访问以下网址下载:
?Category=38&tabindex=2
下载后,再根据它的帮助文档进行一些必要的设置。
在成功下载并设置了之后,就可以开始使用TreeView控件。记住:在每个使用它的程序页面的开头都要导入它的命名空间:
<%@ Import namespace="Microsoft.Web.UI.WebControls" %>
<%@Register TagPrefix="mytree" NameSpace="Microsoft.Web.UI.WebContro-ls" Assembly="Microsoft.Web.UI..WebControls,Version=1.0.2.226,Culture=neu-tral,PublicKeyToken=31bf3856ad364e35" %>
三、三种方式添加节点,创建静态树
开发树状结构要定义一个TreeView控件,并向其中添加所需的Treenode节点。向TreeView控件中添加节点的方法有三种:
1、 在页面中创建:
所有的WebControls都要放在form中,Treeview当然也不例外:
<body>
<form runat="server">
<mytree:treeview runat="server">
<mytree:treenode text="first node"/>
</mytree:treeview>
</form>
</body>
以上的语句创建了具有一个节点first node、名为treeview1的树。
2、在程序代码中创建:
public void Page_Load(object sender,EventArgs e)
{
if(!Page.IsPostBack)
{
TreeNode snode=new TreeNode();
snode.Text="second node";
treeview1.Nodes.Add(snode);
}
}
这样就为上例的treeview1又创建一个节点second node,Add方法是在树的最后添加节点。生成的结构
3、从XML中导入:
在TreeView控件中设定treenodesrc属性的值为numtree.xml:
<mytree:treeview runat="server" treenodesrc="numtree.xml"/>
说明当生成树状控件时会自动从numtree.xml中读取树的节点内容,numtree.xml文件如下:
<?XML version="1.0" encoding="utf-8" ?>
<treenodes>
<treenode text="first node"/>
<treenode text="second node"/>
</treenodes>
生成的树状结果同上面的例子相同
四、方便快捷地创建动态树
以上方法产生的树都是静态的,即使是从XML中导入,它的节点数目也是一定的。当我们要将数据库中的数据用树状结构表现出来时,并不知道这个树的层次和节点数,就需要在TreeView控件中动态地添加树节点。例如用树状结构表现一个公司有许多部门,部门下有员工。部门的数据放在表dept中(包含字段deptid和deptname),部门和员工的对应关系放在表deptperson中(包含字段deptid、personid和personname),并且这些字段都是string类型,这两个表放在数据库mydb.mdb中。这里添加节点的方法也有几种,在此介绍的方法是在页面加载时生成部门节点,当点击部门前的扩展图标按钮后再生成部门下的人员子节点。
在页面中写入:
<mytree:treeview runat="serve" onexpand="treeview1_Expand"/>
在<script Language="c#" runat="server"></script>中加入如下代码:
OleDbConnection myconn;
public void Page_Load(Object sender,EventArgs e)
// 在页面加载时生成部门节点
{
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读取部门表中的数据
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();
}
}
点击扩展图标按钮触发的事件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();
}
}
使用同样的方法和原理,我们可以创建比这更为复杂的树结构。TreeView控件还有许多其他的属性和事件,象ChildType,SelectedStyle,imageurl和onselectedindexchang等,利用这些属性不但可以美化树状结构的外观,而且还可以更好的满足你的使用要求。
五、结论:
在上面的使用中,我们可以看出TreeView控件在生成树状结构方面具有强大功能,与其他编写自定义用户控件和利用XML的方法相比较,它提供的用可扩展的树状结构来显示层次数据方法更加方便、实用和有效,而且出错率非常低。随着对TreeView控件深入的研究,我们也会不断地发现它的更多的有用的方法和功能。
参考文献
[1]运用XML—XSL进行高级用户接口设计(1)—目录树设计
?kind=XML 2002.2
[2]James Avery. Developing with the Treeview Web Control.
(2)/ 2002.4
[3]About The Treeview WebControl
[4]王超、张鹏 ASP.NET/XML深入编程技术. 北京希望电子出版社 2002.1
[5]HOW TO:Dynamically Add Notes to a Treeview WebBrowser Control by Using Visual C#.Net
?scid=kb;EN-US;q32909&GssNB=1
[6]Treeview Element|Treeview Object
.asp