星期零

技术改变生活,分享让我们快乐!
随笔 - 159, 文章 - 0, 评论 - 234, 阅读 - 44万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

winform中生成TreeView树

Posted on   weekzero  阅读(3063)  评论(0编辑  收藏  举报

无论是webform还是winform,TreeView都是常用功能。使用递归方法很方便。

下面分享一个小实例。

数据库中3个字段,分别是:ID,itemType_name,itemType_PID

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
private void itemType_Load(object sender, EventArgs e)
        {
            dataBind();
        }
 
 
        private void dataBind()
        {
 
            //获取数据
            string sql = "select * from itemType order by itemType_paixu";
 
            DB db = new DB();
            string _msg = "";
            DataTable DT = db.GetDt(sql, out _msg);
            //
 
            treeView1.Nodes.Clear();
 
            //添加顶节点
            TreeNode tempNode = new TreeNode();
            tempNode.Text = "商品类别";
            tempNode.Name = "0";
            treeView1.Nodes.Add(tempNode);
            //
 
            nodeBind(treeView1, DT, "0", tempNode);
            treeView1.ExpandAll();
            //
        }
 
        public void nodeBind(TreeView _treeView, DataTable _dt, string _filter, TreeNode _pNode)
        {
 
            //循环构建树
            string sFilter = "itemType_PID=" + _filter;
            TreeNode parentNode = _pNode;
 
            DataView dv = new DataView(_dt);
 
            dv.RowFilter = sFilter;
            if (dv.Count > 0)
            {
                foreach (DataRowView drv in dv)
                {
                    TreeNode tempNode = new TreeNode();
 
                    tempNode.Text = drv["itemType_name"].ToString();
                    tempNode.Name = drv["ID"].ToString();
 
 
                    if (parentNode != null)
                        parentNode.Nodes.Add(tempNode);
                    else
                        _treeView.Nodes.Add(tempNode);
 
                    nodeBind(_treeView, _dt, drv["ID"].ToString(), tempNode);
                }
            }
        }

  上面这个例子是有固定根节点的,下面这个例子是没有根节点的,递归构建更方便。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
private void codeitem_Load(object sender, EventArgs e)
        {
            dataBind();
        }
 
        private void dataBind()
        {
 
            //获取数据
            string sql = "select * from codeitem order by codeitem_paixu";
 
            DB db = new DB();
            string _msg = "";
            DataTable DT = db.GetDt(sql, out _msg);
            //
 
            treeView1.Nodes.Clear();
            nodeBind(treeView1, DT, "0", null);
            treeView1.ExpandAll();
            //
        }
 
        public void nodeBind(TreeView _treeView, DataTable _dt, string _filter, TreeNode _pNode)
        {
 
            //循环构建树
            string sFilter = "codeitem_pcode=’" + _filter + "’";
            TreeNode parentNode = _pNode;
 
            DataView dv = new DataView(_dt);
 
            dv.RowFilter = sFilter;
            if (dv.Count > 0)
            {
                foreach (DataRowView drv in dv)
                {
                    TreeNode tempNode = new TreeNode();
 
                    tempNode.Text = drv["codeitem_name"].ToString();
                    tempNode.Name = drv["ID"].ToString();
 
 
                    if (parentNode != null)
                        parentNode.Nodes.Add(tempNode);
                    else
                        _treeView.Nodes.Add(tempNode);
 
                    nodeBind(_treeView, _dt, drv["codeitem_code"].ToString(), tempNode);
                }
            }
        }

  bubuko.com版权所有,禁止转载。原地址:【winform,TreeView树,树形菜单,bubufx】

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示