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

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

这里主要是示意,只建了两列,一列是节点名称,一列是节点层级。
程序源码:https://github.com/yuanhuihai/treeViewDataBase
节点遍历方法,通过for循环实现。这里dt是从数据库返回的数据集。
//绑定TrreViewprivate void InitModuleTree(DataTable dt){//清空treeview上所有节点this.tree_Role.Nodes.Clear();int[] gen = new int[dt.Rows.Count]; //用于存储父节点Tagint[] zi = new int[dt.Rows.Count]; //用于存储子节点Tagfor (int i = 0; i < gen.Length; i++){string zhi = dt.Rows[i][1].ToString();//获取节点Tag值 eg:1-2if (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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




