C# TreeView控件动态组树(可控制节点级别)
需求分析:
面对如此“强(wu)大(yu)”的需求,本菜鸟也是想尽办法做封装,来帮助深陷huohai的亲们。。我们的查询界面变成了树+下拉框+复选框,每个界面都有树,我就索性把树封装了,不同的界面,树所指引到的节点是不一样的,所以也要插入一个级别。
查询界面如下:
当前树界面可以取到二级树,我就把级别参数传“2”就只显示到二级节点了。
代码如下:
#region 加载全部国家-省-市-档案馆树--周洲--2016年4月3日9:22:16
/// <summary>
/// 动态加载树
/// </summary>
/// <param name="treeview">控件名称</param>
/// <param name="jibie">树的级别</param>
public void Alltree(TreeView treeview,int jibie)
{
List<jujibModel> julist = new List<jujibModel>();
List<ArchiveModel> arlist = new List<ArchiveModel>();
JujubBLL jubll = new JujubBLL();
//查询所有的局级信息用来组树
julist = jubll.QueryAllJu();
//查询所有的档案馆信息用来组树
arlist = jubll.QueryAllArchive();
/*
* 开始组树,如果jibie是2,直到二级树
*/
//一级树状:国家档案局
foreach (var guolist in julist)
{
if (guolist.Parent.ToString() == "1000000")
{
TreeNode guonode = new TreeNode();
guonode.Text = guolist.Acode + "·" + guolist.Aname;
guonode.ForeColor = Color.Blue;
treeview.Nodes.Add(guonode);
if (2 <= jibie)
{
//二级树状:省级档案局
foreach (var shenglist in julist)
{
if (shenglist.Parent.ToString() == "4110001")
{
TreeNode shengnode = new TreeNode();
shengnode.Text = shenglist.Acode + "·" + shenglist.Aname;
shengnode.Name = shenglist.Id;
shengnode.ForeColor = Color.Blue;
guonode.Nodes.AddRange(new TreeNode[] { shengnode });
if (3 <= jibie)
{
if (4 <= jibie)
{
//三级树状:加载省馆,放在第一个位置
foreach (var guanlist in arlist)
{
if (guanlist.Citycode == shenglist.Id)
{
TreeNode guannode = new TreeNode();
guannode.Text = guanlist.Acode + "·" + guanlist.Aname;
shengnode.Nodes.AddRange(new TreeNode[] { guannode });
}
}
}
//三级树状:市级档案局
foreach (var shilist in julist)
{
if (shilist.Parent.ToString() == shenglist.Id.ToString())
{
TreeNode shinode = new TreeNode();
shinode.Text = shilist.Acode + "·" + shilist.Aname;
shinode.ForeColor = Color.Blue;
shengnode.Nodes.AddRange(new TreeNode[] { shinode });
if (4 <= jibie)
{
//四级树状:各个档案馆
foreach (var guanlist in arlist)
{
if (guanlist.Citycode.ToString() == shilist.Id.ToString())
{
TreeNode guancode = new TreeNode();
guancode.Text = guanlist.Acode + "·" + guanlist.Aname;
shinode.Nodes.AddRange(new TreeNode[] { guancode });
}
}
}
}
}
if (4 <= jibie)
{
//三级树状:特殊市当省对待,下面节点是各个馆
if (shengnode.Nodes.Count <= 0)
{
foreach (var guanlist in arlist)
{
if (guanlist.Citycode.ToString() == shenglist.Id.ToString())
{
TreeNode guancode = new TreeNode();
guancode.Text = guanlist.Acode + "·" + guanlist.Aname;
shengnode.Nodes.AddRange(new TreeNode[] { guancode });
}
}
}
}
}
}
}
}
}
}
}
#endregion
调用树的语句(窗体加载的时候):
#region 窗体加载 范晓权 2016年3月14日15:58:18
private void Form1_Load(object sender, EventArgs e)
{
//周洲加树
Alltree(tongjitree,2);
其他的例子:
如果我需要取到4级,当前北京市特殊,是直辖市,所以下属直接是4级的树,我代码里面也需要考虑这样的情况。还有一些计划单列市,我也要单独循环出来做判断。(下面就是四级树的样子)
调用语句:
Alltree(tongjitree,4);
总结:
1.自己要逻辑清楚,先写出自己的注释,,再写代码会比较容易一些。。
2.接触没有写过的东西,要去看帮助文档,介绍的都很详细。什么方法属性都可以得到。
还没有评论,来说两句吧...