如何从Sqlite数据库加载数据实现灵活树形菜单界面及节点遍历方法

这几天一直在思考做一个树形菜单界面,并且要从数据库中加载内容,接着就有了后续的文章。首先从视频来看看效果吧。(TreeView 能够自己对节点进行编辑,然而这些节点都是最初就写好的,不够具有灵活性)

如何从Sqlite数据库加载数据实现灵活树形菜单界面及节点遍历方法

实现步骤

主要代码如下

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

这里主要起示意作用,只搭建了两列。其中一列是节点名称,另一列是节点层级。

程序源码:

节点遍历方法是通过 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从 zhi 中找到其索引位置,然后截取该索引位置之后的部分并进行解析。'-') + 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 的节点添加了 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语言风格:保持原文风格,去掉最前面的序号,把//找到当前子节点的父节点
{
childNode 的 Tag 属性被设置为 zi[i] 转换后的字符串。
childNode.Text = dt.Rows[i][0].ToString();//填充子节点名称
item.Nodes.Add(childNode);
}
}
}
}
tree_Role.ExpandAll(); //展开整棵树
}

你可能想看:
« 上一篇
下一篇 »

相关推荐

FreeBasic:强大免费开源的64位basic编译器及应用优势

2025年05月10日

82阅读

脊柱侧弯矫正方法大盘点:运动康复、支具矫正等多种方式

2025年05月09日

87阅读

如何在winForm标题栏去掉标题文字且任务栏图标正常显示

2025年05月09日

86阅读

十一黄金周促销广告词大全,国庆购物狂欢等你来

2025年05月09日

78阅读

关闭快速编辑模式及插入模式,设置控制台指定文字颜色举例

2025年05月09日

63阅读

黄金搭档低糖高钙饮品包装及成分功效全解析,适合人群要知晓

2025年05月09日

91阅读