利用TreeView控件动态生成无限级树

利用TreeView控件动态生成无限级树
项目需要,有一个树形菜单需要动态生成,联想到TreeView控件,决定用TreeView来实现

首先注意到了TreeView控件有一个属性TreeNodeSrc
这个属性可以指定一个固定格式的xml文件
<?xml version="1.0" encoding="utf-8" ?>
<TREENODES>
    <TREENODE text="aaaaaaaa" CheckBox="true"></TREENODE>
    <TREENODE text="bbbbbbbb" CheckBox="true"></TREENODE>
    <TREENODE text="cccccccccc" EXPANDED="true" CheckBox="true">
        <TREENODE text="ddddddddd" CheckBox="true"></TREENODE>
        <TREENODE text="eeeeeeeee" CheckBox="true"></TREENODE>
    </TREENODE>
    <TREENODE text="fffffffffffff" CheckBox="true"></TREENODE>
</TREENODES>于是就想把数据库里的文件读出来写入一个xml文件中,然后再进行绑定
既然是无限级菜单,肯定要用到递归来实现,于是就写了一个如下的递归算法

private   void  CreateXml(XmlDocument objXMLDoc, XmlElement objRootElem,  int  belong)
        
{
            
//Get DataSet 这里的DataSet具体获取方法我省略掉了
            DataSet ds = new DataSet();
            
            
foreach(DataRow dr in ds.Tables[0].Rows)
            
{
                
//Create ChildNode TreeNode
                XmlElement objXmlElem = objXMLDoc.CreateElement("TREENODE");
                objRootElem.AppendChild(objXmlElem);

                
//Create Attributes Text
                XmlAttribute objXmlAttText = objXMLDoc.CreateAttribute("Text");
                objXmlAttText.Value 
= dr["text"].ToString().Trim();
                objXmlElem.SetAttributeNode(objXmlAttText);

                
//Create Attributes CheckBox
                XmlAttribute objXmlAttCB = objXMLDoc.CreateAttribute("CheckBox");
                objXmlAttCB.Value 
= "True";
                objXmlElem.SetAttributeNode(objXmlAttCB);

                
int id = int.Parse(dr["id"].ToString().Trim());
                CreateXml(objXMLDoc, objXmlElem, id);
            }

        }


 

然后用下面的方法来实现绑定

private   void  BindXmlTree()
        
{
            
//Create Xml File
            XmlDocument objXmlDoc = new XmlDocument();

            
//Insert Xml Declaration
            XmlDeclaration objXmlDeclare = objXmlDoc.CreateXmlDeclaration("1.0""UTF-8""yes");
            objXmlDoc.InsertBefore(objXmlDeclare, objXmlDoc.DocumentElement);

            XmlElement objRootElem 
= objXmlDoc.CreateElement("TREENODES");
            objXmlDoc.AppendChild(objRootElem);

            CreateXml(objXmlDoc, objRootElem, 
0);

            objXmlDoc.Save(
"E:/TreeMenu.xml");
            TreeView2.TreeNodeSrc 
= "TreeMenu.xml";
        }


到最后两行我就停住了,因为问题出现了
生成的objXmlDoc文件不知道用什么方式才能绑定上TreeNodeSrc
我试了试直接 TreeView2.TreeNodeSrc = objXmlDoc;
可是TreeNodeSrc是String型的数据,没办法
有没有什么方法可以不保存这个objXmlDoc文件而直接绑定呢?

于是就换了个办法来实现
TreeView有一个节点控件叫TreeNode,直接把数据给TreeNode上


private   void  CreateTree( int  belong, Microsoft.Web.UI.WebControls.TreeNode rootnode)
        
{
            DataSet ds 
= new DataSet();

            
foreach(DataRow dr in ds.Tables[0].Rows)
            
{
                Microsoft.Web.UI.WebControls.TreeNode treenode 
= new Microsoft.Web.UI.WebControls.TreeNode();
                treenode.Text 
= dr["text"].ToString().Trim();
                treenode.CheckBox 
= true;
                treenode.Expanded 
= true;
                rootnode.Nodes.Add(treenode);

                
int id = int.Parse(dr["id"].ToString().Trim());
                CreateTree(id, treenode);
            }

        }


用的是一样的递归思想,而且我发现这样做还比较简单一些,很多TreeNode自带的属性很方便修改
如果用Xml还要手动去添加每一个属性,麻烦
在PageLoad里触发这个方法
private void Page_Load(object sender, System.EventArgs e)
        {
            Microsoft.Web.UI.WebControls.TreeNode rootnode = new Microsoft.Web.UI.WebControls.TreeNode();
            rootnode.Expanded = true;
            TreeView2.Nodes.Add(rootnode);
            CreateTree(0, rootnode);
        }注意,这里为了实现递归,不得不添加一个空的根节点rootnode

这样就算大致实现了
另,数据库里的数据格式是这样的
-----------------------------------------
id                    text                     belong
1                    aaaa                    0
2                    bbbb                   0
3                    cccc                    0
4                    dddd                    1
5                    eeee                    2
6                    ffff                        4
posted on 2004-10-28 22:32 流浪的狗 阅读(15011) 评论(36)  编辑 收藏 引用 收藏至365Key 所属分类: Dotnet C#
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很全面的Ace Admin1.3官方文档,包含有最全面的组件及例子,适合急需使用该技术开发的人。 响应式Bootstrap网站后台管理系统模板ace admin,非常不错的轻量级易用的admin后台管理系统,基于Bootstrap3,拥有强大的功能组件以及UI组件,基本能满足后台管理系统的需求,而且能根据不同设备适配显示,而且还有四个主题可以切换。 网页图标全采用FontAwesome,除Bootstrap,jQuery UI使用到的第三方插件有: jQuery 2.0.3 jQuery UI 1.10.3 (Custom Build) Twitter Bootstrap 3.0.0 FontAwesome 3.2.1 Google "Open Sans" Font jQuery Flot Charts 0.8.1 jQuery Sparklines 2.1.2 Easy Pie Chart 1.2.5 jQuery Knob 1.2.0 jQuery Validate 1.11.1 FuelUX 2.3.0 (Spinner & Wizard & Treeview) FullCalendar 1.6.4 jQuery ColorBox 1.4.27 jQuery dataTables 1.9.4 jQuery Chosen 1.0 jQuery Masked Input 1.3.1 jQuery Input Limiter 1.3.1 jQuery AutoSize 1.17.7 Bootstrap Colorpicker Bootstrap Datepicker Bootstrap Timepicker v0.2.3 Bootstrap DateRange Picker 1.2 Bootbox.js 4.0.0 jQuery Gritter 1.7.4 jQuery slimScroll 1.1.1 Spin.js 1.3.0 jQuery UI Touch Punch 0.2.2 Google Code Prettify ExplorerCanvas Mindmup Wysiwyg Editor Toopay Markdown Editor 1.1.4 X-editable 1.4.6 Select2 3.4.2 Bootstrap Tags 2.2.5 jQuery Mobile 1.3.2 (Custom Build) jqGrid 4.5.2 Dropzone.js 3.0 Nestable lists plugin 浏览器兼容: Firefox 5+ Google Chrome 14+ Internet Explorer 8 Internet Explorer 9 Opera 11 Safari 5 Bootstrap兼容: Bootstrap 2.2.x Bootstrap 2.3.x Bootstrap 3.0.x ace admin

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值