C# TreeView控件动态组树(可控制节点级别)


需求分析:


       面对如此“强(wu)大(yu)”的需求,本菜鸟也是想尽办法做封装,来帮助深陷huohai的亲们。。我们的查询界面变成了树+下拉框+复选框,每个界面都有树,我就索性把树封装了,不同的界面,树所指引到的节点是不一样的,所以也要插入一个级别。


查询界面如下:


C# TreeView控件动态组树(可控制节点级别)_第1张图片


当前树界面可以取到二级树,我就把级别参数传“2”就只显示到二级节点了。


代码如下:


 #region 加载全部国家-省-市-档案馆树--周洲--2016年4月3日9:22:16
        /// <summary>
        /// 动态加载树
        /// </summary>
        /// <param name="treeview">控件名称</param>
        /// <param name="jibie">树的级别</param>
        public void Alltree(TreeView treeview,int jibie)
        {
           
            List<jujibModel> julist = new List<jujibModel>();
            List<ArchiveModel> arlist = new List<ArchiveModel>();
            JujubBLL jubll = new JujubBLL();
            //查询所有的局级信息用来组树
            julist = jubll.QueryAllJu();
            //查询所有的档案馆信息用来组树
            arlist = jubll.QueryAllArchive();
            /*
             * 开始组树,如果jibie是2,直到二级树
             */
            //一级树状:国家档案局
            foreach (var guolist in julist)
            {
                if (guolist.Parent.ToString() == "1000000")
                {
                    TreeNode guonode = new TreeNode();
                    guonode.Text = guolist.Acode + "·" + guolist.Aname;
                    guonode.ForeColor = Color.Blue;
                    treeview.Nodes.Add(guonode);
                    
                    if (2 <= jibie)
                    {
                        //二级树状:省级档案局
                        foreach (var shenglist in julist)
                        {
                            if (shenglist.Parent.ToString() == "4110001")
                            {
                                TreeNode shengnode = new TreeNode();
                                shengnode.Text = shenglist.Acode + "·" + shenglist.Aname;
                                shengnode.Name = shenglist.Id;
                                shengnode.ForeColor = Color.Blue;
                                guonode.Nodes.AddRange(new TreeNode[] { shengnode });
                                if (3 <= jibie)
                                {
                                    if (4 <= jibie)
                                    {
                                        //三级树状:加载省馆,放在第一个位置
                                        foreach (var guanlist in arlist)
                                        {
                                            if (guanlist.Citycode == shenglist.Id)
                                            {
                                                TreeNode guannode = new TreeNode();
                                                guannode.Text = guanlist.Acode + "·" + guanlist.Aname;
                                                shengnode.Nodes.AddRange(new TreeNode[] { guannode });
                                            }
                                        }
                                    }
                                    //三级树状:市级档案局
                                    foreach (var shilist in julist)
                                    {
                                        if (shilist.Parent.ToString() == shenglist.Id.ToString())
                                        {
                                            TreeNode shinode = new TreeNode();
                                            shinode.Text = shilist.Acode + "·" + shilist.Aname;
                                            shinode.ForeColor = Color.Blue;
                                            shengnode.Nodes.AddRange(new TreeNode[] { shinode });
                                            if (4 <= jibie)
                                            {
                                                //四级树状:各个档案馆
                                                foreach (var guanlist in arlist)
                                                {
                                                    if (guanlist.Citycode.ToString() == shilist.Id.ToString())
                                                    {
                                                        TreeNode guancode = new TreeNode();
                                                        guancode.Text = guanlist.Acode + "·" + guanlist.Aname;
                                                        shinode.Nodes.AddRange(new TreeNode[] { guancode });
                                                    }
                                                }
                                            }

                                        }
                                    }
                                    if (4 <= jibie)
                                    {
                                        //三级树状:特殊市当省对待,下面节点是各个馆
                                        if (shengnode.Nodes.Count <= 0)
                                        {
                                            foreach (var guanlist in arlist)
                                            {
                                                if (guanlist.Citycode.ToString() == shenglist.Id.ToString())
                                                {
                                                    TreeNode guancode = new TreeNode();
                                                    guancode.Text = guanlist.Acode + "·" + guanlist.Aname;
                                                   
                                                    shengnode.Nodes.AddRange(new TreeNode[] { guancode });
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        } 
        #endregion



调用树的语句(窗体加载的时候):


  #region 窗体加载 范晓权 2016年3月14日15:58:18
        private void Form1_Load(object sender, EventArgs e)
        {
           //周洲加树
            Alltree(tongjitree,2);


其他的例子:


    如果我需要取到4级,当前北京市特殊,是直辖市,所以下属直接是4级的树,我代码里面也需要考虑这样的情况。还有一些计划单列市,我也要单独循环出来做判断。(下面就是四级树的样子)


调用语句:

 Alltree(tongjitree,4);




总结:


1.自己要逻辑清楚,先写出自己的注释,,再写代码会比较容易一些。。

2.接触没有写过的东西,要去看帮助文档,介绍的都很详细。什么方法属性都可以得到。

你可能感兴趣的:(C#,控件,treeview)