暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

C#-TreeView控件加载数据库数据

数字化设备人 2021-05-09
912

       这几天一直想着做个树形菜单界面,并且内容从数据库中加载,于是就有了接下来的文章。先从视频看下效果吧。(TreeView可以自己编辑节点,但是这些节点都是一开始写好的,不够灵活)



实现步骤


     主要代码如下

这里的数据库是Sqlite数据库。表格结构如下图

这里主要是示意,只建了两列,一列是节点名称,一列是节点层级。


程序源码:https://github.com/yuanhuihai/treeViewDataBase


节点遍历方法,通过for循环实现。这里dt是从数据库返回的数据集。

      //绑定TrreView
    private void InitModuleTree(DataTable dt)
    {
    //清空treeview上所有节点
    this.tree_Role.Nodes.Clear();
    int[] gen = new int[dt.Rows.Count]; //用于存储父节点Tag
    int[] zi = new int[dt.Rows.Count]; //用于存储子节点Tag
    for (int i = 0; i < gen.Length; i++)
    {
    string zhi = dt.Rows[i][1].ToString();//获取节点Tag值 eg:1-2
    if (zhi.Length > 1) //表示是子节点 eg:1-2
    {
    gen[i] = int.Parse(zhi.Substring(0, zhi.IndexOf('-')));
    zi[i] = int.Parse(zhi.Substring(zhi.IndexOf('-') + 1));
    }
    else //表示是根节点 eg:2
    {
    //将所有父节点加到treeview上
    zi[i] = int.Parse(zhi);
    TreeNode nodeParent = new TreeNode();
    nodeParent.Tag = (zi[i]).ToString();
    nodeParent.Text = dt.Rows[i][0].ToString();//填充父节点名称
    tree_Role.Nodes.Add(nodeParent);
    }
    }
    bindChildNote(dt, gen, zi);
    }
    //绑定子节点
    private void bindChildNote(DataTable dt, int[] gen, int[] zi)
    {
    for (int i = 0; i < gen.Length; i++)
    {
    if (gen[i] != 0 && zi[i] != 0) //便利所有节点,找到所有子节点
    {
    TreeNode childNode = new TreeNode();
    foreach (TreeNode item in tree_Role.Nodes) //便历treeview上所有父节点
    {
    if (item.Tag.ToString() == gen[i].ToString()) //找到当前子节点的父节点
    {
    childNode.Tag = zi[i].ToString();
    childNode.Text = dt.Rows[i][0].ToString();//填充子节点名称
    item.Nodes.Add(childNode);
    }
    }
    }
    }
    tree_Role.ExpandAll(); //展开整棵树
    }
    复制




    文章转载自数字化设备人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论