C#-TreeView加载(递归)

故事扮演 提交于 2020-02-13 03:07:58

文件资料递归加载:

        private void frmMain_Load(object sender, EventArgs e)
        {
           
            string demopath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "deom");//所有文件的根目录
            LoadData(demopath, treeView1.Nodes);
        }
        //递归方法
        private void LoadData(string paths, TreeNodeCollection nodes)//跟目录路径和控件根节点
        {
            string[] dnames=Directory.GetDirectories(paths);//获取当前目录下的所有子目录(路径和名称)
            foreach (var item in dnames)
            {
                //添加根节点
                TreeNode IndexNode = nodes.Add(Path.GetFileName(item));
                LoadData(item, IndexNode.Nodes);//递归调用
            }
            //最后一个子目录下面没有了就会执行读取txt文件,读取完毕以后,上一级子目录也就是执行完毕LoadData()方法,然后继续执行读取TXT文件(最终都会执行)
            //读取文本文件(只对于当前路径信息的文本文件)
            string[] txts=Directory.GetFiles(paths, "*.txt");//(返回txt文件名称和路径)
            foreach (var item in txts)
            {
                TreeNode txtnode=nodes.Add(Path.GetFileName(item));
                //因为后面双击要打开文本文件所以要记住各个路径信息】
                txtnode.Tag = item;//将当前TXT文件的路径保存至节点的Tag属性中
            } 
        }  

数据库资料递归加载实例:

        private void Form1_Load(object sender, EventArgs e)
        {
            NewMethod();

        }

        public void NewMethod()//封装窗口加载方法,通过委托传到子窗体
        {
            treeView1.Nodes.Clear();//传过去之前先清理所有节点集合
            LoadDataToTree(-1, treeView1.Nodes);//根节点
        }

        private void LoadDataToTree(int pid, TreeNodeCollection nodes)//根节点
        {
            //遍历一级节点数据
            List<Category> list = GetDataByParentID(pid);
            foreach (var item in list)
            {
                TreeNode nods = nodes.Add(item.TName);//将当前对象添加至根节点,并创建节点 用于添加当前一级节点的子节点
                nods.Tag = item.Tid;//获取当前节点的ID,并保存至nods节点对象
                LoadDataToTree(item.Tid, nods.Nodes);//重新调用当前方法,获取当前对象的子节点  tid=1
            }
        }

        //查询一级节点
        private List<Category> GetDataByParentID(int pid)
        {
            List<Category> ulist = new List<Category>();
            string sql = "SELECT TId,tName FROM Category WHERE tparentId=@PID";
            SqlParameter[] pms = { new SqlParameter("@PID", SqlDbType.Int) { Value = pid } };
            using (SqlDataReader reader = SqlHelper.Reader(sql, CommandType.Text, pms))
            {
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        Category u = new Category();
                        u.Tid = reader.GetInt32(0);
                        u.TName = reader.GetString(1);
                        ulist.Add(u);
                    }
                }
            }
            return ulist;
       }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!