cdepcode bdepend cdepname depgrade
部门编号 是否末级 部门名称 级次
10 False 临床服务类科室 1
30200001 True 120车队 4
1002 False 全科医疗科 2
1003 False 内科 2
100301 False 呼吸内科 3
10030101 True 呼吸内科门诊 4
10030102 True 呼吸内科病房 4
100302 False 消化内科 3
10030201 True 消化内科门诊 4
10030202 True 消化内科病房 4
100303 False 神经康复科 3
10030301 True 神经内科门诊 4
20250001 True 体检中心 4
20260001 True 放疗科病房 4
2027 True 临床医学转化实验室 2
10030502 True 血液内科病房 4
100306 False 肾病学科 3
10030602 True 肾病学科病房 4
10030701 True 内分泌科门诊 4
100308 False 免疫学科 3
10030801 True 免疫学科门诊 4
100309 False 变态反应科 3
求无限级的树形菜单绑定方法?
------解决思路----------------------
什么叫无限级,, 百度递归吧。
------解决思路----------------------
请进行 递归
------解决思路----------------------
数据库表做成这样
ID PID departmentname
编号 父级部门编号 部门名称
然后递归就行了,非常方便的
------解决思路----------------------
我以前写的无限分类树(treeview实现)的主要代码,你一看应该就能明白
public void tv_bind()
{
try
{
//从数据库中读取分类信息至DataSet
//绑定前先清空数据集
ds.Clear();
treeView1.Nodes.Clear();
ds=getdata.getds("select * from tree order by orderid desc,id asc","tree");
//如果数据库中有信息那么构造树,否则提示无接点
if (ds.Tables["tree"].Rows.Count > 0)
{
//清除树节点,从根添加树
treeView1.Nodes.Clear();
Add_tree(0, (TreeNode)null);
}
else
{
treeView1.Nodes.Clear();
TreeNode node = new TreeNode();
node.Text = "暂无任何分类信息";
treeView1.Nodes.Add(node);
}
}
catch
{
treeView1.Nodes.Clear();
TreeNode node = new TreeNode();
node.Text = "暂无任何分类信息:请检查数据库连接是否正常";
treeView1.Nodes.Add(node);
}
//标记树的状态为展开,展开树
//isexpand = true;
//treeView1.ExpandAll();
}
//递归树
private void Add_tree(int pid, TreeNode pnode)
{
DataRow[] dr = ds.Tables["tree"].Select("pid=" + pid);
foreach (DataRow row in dr)
{
TreeNode node = new TreeNode();
if (pnode == null)
{
node.Text = row["nodename"].ToString();
node.Tag = row["id"].ToString();
node.ToolTipText = row["notes"].ToString();
treeView1.Nodes.Add(node);
Add_tree(int.Parse(row["id"].ToString()), node);
}
else
{
node.Text = row["nodename"].ToString();
node.Tag = row["id"].ToString();
node.ToolTipText = row["notes"].ToString();
pnode.Nodes.Add(node);
Add_tree(int.Parse(row["id"].ToString()), node);
}
}
}
------解决思路----------------------
建议不要一次性全部绑定,根据用户点开用递归逐级加载。
------解决思路----------------------
http://blog.csdn.net/xianfajushi/article/details/7756584
------解决思路----------------------
动态显示树形列表菜单
public void GetCavernMenu(TreeNode newNodeA, ToolStripDropDownItem newmenuA, bool BL)
{
bool Var_Bool = true;
if (newmenuA.HasDropDownItems && newmenuA.DropDownItems.Count > 0)
for (int j = 0; j < newmenuA.DropDownItems.Count; j++) //遍历二级菜单项
{
//将二级菜单名称添加到TreeView组件的子节点newNode1中,并设置当前节点的子节点newNode2
TreeNode newNodeB = newNodeA.Nodes.Add(newmenuA.DropDownItems[j].Text);
Var_Bool = true;
if (BL == false)//判断当前命令项的上一级命令是否可用
{
newNodeB.ForeColor = Color.Silver;//设置当前命令项的字体颜色为不可用色
newNodeB.Tag = 0;//标识,不显示相应的窗体
Var_Bool = false;
}
else
{
if (newmenuA.DropDownItems[j].Enabled == false)//判断当前命令项是否为可用
{
newNodeB.ForeColor = Color.Silver;//设置当前命令项的字体颜色为不可用色
newNodeB.Tag = 0;//标识,不显示相应的窗体
Var_Bool = false;
}
else
{
newNodeA.ForeColor = Color.Black;//设置当前命令项的字体颜色为可用色
newNodeB.Tag = int.Parse(newmenuA.DropDownItems[j].Tag.ToString());//标识,显示相应的窗体
}
}
//将当前菜单项的所有相关信息存入到ToolStripDropDownItem对象中
ToolStripDropDownItem newmenuB = (ToolStripDropDownItem)newmenuA.DropDownItems[j];
if (newmenuB.HasDropDownItems && newmenuA.DropDownItems.Count > 0)//如果当前命令项有子项
{
newNodeB.Tag = 0;//标识,有子项的命令项
GetCavernMenu(newNodeB, newmenuB, Var_Bool);//调用递归方法
}
}
}
------解决思路----------------------
http://goobbe.com/questions/3899144/tree-data-structure-in-c-sharp