闲话不说,下面开始:
第一步:创建一个asp.net工程,命名为TreeViewTest(自己喜欢吧,叫什么都可以)。
第二步:在工程中添加一个XML文件,命名为TreeSource.xml;将Default.aspx切换到设计视图,拽进一个TreeView控件命名为TreeView1和一个XmlDataSource控件命名为XmlDataSource1,配置TreeView1的数据源为XmlDataSource1。
第三步:建立数据库表(Tree_School),只需三列:
create
table
Tree_school
(
ID
int
primary
key
,
content
varchar
(
50
)
not
null
,
parent_id
varchar
(
50
)
not
null
)
往表里插入数据吧,不过要注意里面的两个id值哦,我的试验数据如下所示:
ID content parent_id
--------- ---------------------------------------------------- --------
1 学校0
2 学校1 1
3 学校2 1
4 学生12
5 学生2 2
6 学生3 3
7 学生43
8 图书1 4
9 图书馆 0
10 藏书室19
第四步:开始写代码了(终于进入正题了呵呵),代码我就不多解释了,关键部位有注释的。
private
void
BindTreeView()

...
{
SqlConnectioncon=newSqlConnection("datasource=.;uid=sa;pwd=;database=Exsamples;");
con.Open();
stringsqlstr="select*fromTree_SchoolwhereID>0orderbyparent_id";
SqlCommandcmd=newSqlCommand(sqlstr,con);
SqlDataReadersdr=cmd.ExecuteReader();
InitTreeXMl(Server.MapPath("TreeSource.xml"),sdr);
}

private
void
InitTreeXMl(
string
XmlFileName,SqlDataReaderdr)

...
{
XmlDocumentxmlDoc=newXmlDocument();
xmlDoc.Load(XmlFileName);
XmlNoderoot=xmlDoc.SelectSingleNode("rootTreenode");//查找<rootTreenode>
//删除初根节点外的所有节点。
root.RemoveAll();
XmlElementtreenode1=(XmlElement)root;
treenode1.SetAttribute("Node_ID","0");
treenode1.SetAttribute("Father_ID","-1");
treenode1.SetAttribute("NodeName","后台管理");
//循环dr中的数据,将数据逐条写入Xml文件。
while(dr.Read())

...{
//添加第一级结点
if(treenode1.GetAttribute("Node_ID").ToString()==dr["parent_id"].ToString())

...{
XmlElementxe=xmlDoc.CreateElement("treenode");//创建一个<treenode>节点
xe.SetAttribute("Node_ID",dr["ID"].ToString());
xe.SetAttribute("Father_ID",dr["parent_id"].ToString());
xe.SetAttribute("NodeName",dr["content"].ToString());
treenode1.AppendChild(xe);
}
else

...{
InnerXmlNode(root,dr,xmlDoc);
}
}
xmlDoc.Save(XmlFileName);
}

//
递归往xml文件中写数据
private
void
InnerXmlNode(XmlNodetreenode,SqlDataReaderdr,XmlDocumentxmlDoc)

...
{
XmlNodeListnodeList=treenode.ChildNodes;//获取treenode节点的所有子节点
foreach(XmlNodexninnodeList)

...{
XmlElementtreenode2=(XmlElement)xn;
if(treenode2.GetAttribute("Node_ID").ToString()==dr["parent_id"].ToString())

...{
XmlElementxe=xmlDoc.CreateElement("treenode");//创建一个<treenode>节点
xe.SetAttribute("Node_ID",dr["ID"].ToString());
xe.SetAttribute("Father_ID",dr["parent_id"].ToString());
xe.SetAttribute("NodeName",dr["content"].ToString());
treenode2.AppendChild(xe);
break;
}
elseif(treenode2.ChildNodes.Count>0)

...{

InnerXmlNode(xn,dr,xmlDoc);
}
}
}
别忘了还要在Page_Load事件里加入下面的语句:
if
(
!
IsPostBack)

...
{
BindTreeView();
}
别以为到这里就完了,还有最后的关键步骤,下面继续。
第五步:将Default.aspx页切换到源视图,在TreeView1的html标签内加入以下代码:
<
DataBindings
>
<
asp:TreeNodeBinding
DataMember
="treenode"
TextField
="NodeName"
/>
<
asp:TreeNodeBinding
DataMember
="rootTreenode"
TextField
="NodeName"
/>
</
DataBindings
>
到了这里就可以运行调试了,我的运行结果如下图所示:

小弟就只写到这里了,有问题望各位指出。至于添加、删除、更新结点,结点的超链接等不在本话题讨论范围之内,各位兄台就自行研究吧,有成果的话贴出来大家一起学习学习。