#region TreeView递归无限节点加载
/// <summary>
/// TreeView递归无限节点加载
///
/// 数据表要求-------------------------------------------------
///
/// NodeValue(ID) RootSign(RootID) NodeText(Name)
/// 001 root RootDisNameA
/// (注释:RootText)
/// 002 root RootDisNameB
/// (注释:RootText)
/// 003 001 RootDisNameC
/// 004 001 RootDisNameD
/// 005 001 RootDisNameE
/// 006 002 RootDisNameF
/// 007 002 RootDisNameG
/// 008 005 RootDisNameH
/// 009 007 RootDisNameI
/// 010 007 RootDisNameJ
/// 011 008 RootDisNameK
/// 012 011 RootDisNameL
///
/// 数据表要求------------------------------------------------
/// 这三个字段是必须的,名字可以自定义
/// </summary>
/// <param name="tv">树形控件</param>
/// <param name="dt">数据源控件</param>
/// <param name="NodeText">节点显示的字段名</param>
/// <param name="NodeValue">表主键编码字段名</param>
/// <param name="RootSign">根编码字段名</param>
/// <param name="RootText">显示根的条件内容</param>
public void LoadTreeViewDt(TreeView tv, DataTable dt, string NodeText, string NodeValue, string RootSign, string RootText)
{
//得到根节点信息
DataRow[] DataRoot = dt.Select(RootSign + "='" + RootText + "'");
//循环遍历根节点信息
foreach (DataRow dr in DataRoot)
{
//加载根节点
TreeNode tn = new TreeNode();
tn.Text = dr[NodeText].ToString();
tn.Tag = dr[NodeValue].ToString();
tv.Nodes.Add(tn);
//递归加载子节点
LoadNodes(tn, dr, NodeText, NodeValue, RootSign, dt);
}
}
private void LoadNodes(TreeNode tn, DataRow dr, string NodeText, string NodeValue, string RootSign, DataTable dt)
{
if (dr == null || tn == null) { return; }
//得到子节点信息
DataRow[] DataChild = dt.Select(RootSign + "='" + dr[NodeValue].ToString() + "'");
if (DataChild != null || DataChild.Length > 0)
{
//循环遍历子节点信息
foreach (DataRow drChild in DataChild)
{
//加载子节点
TreeNode tnChild = new TreeNode();
tnChild.Text = drChild[NodeText].ToString();
tnChild.Tag = drChild[NodeValue].ToString();
tn.Nodes.Add(tnChild);
//形成递归
LoadNodes(tnChild, drChild, NodeText, NodeValue, RootSign, dt);
}
}
}
#endregion
/// <summary>
/// TreeView递归无限节点加载
///
/// 数据表要求-------------------------------------------------
///
/// NodeValue(ID) RootSign(RootID) NodeText(Name)
/// 001 root RootDisNameA
/// (注释:RootText)
/// 002 root RootDisNameB
/// (注释:RootText)
/// 003 001 RootDisNameC
/// 004 001 RootDisNameD
/// 005 001 RootDisNameE
/// 006 002 RootDisNameF
/// 007 002 RootDisNameG
/// 008 005 RootDisNameH
/// 009 007 RootDisNameI
/// 010 007 RootDisNameJ
/// 011 008 RootDisNameK
/// 012 011 RootDisNameL
///
/// 数据表要求------------------------------------------------
/// 这三个字段是必须的,名字可以自定义
/// </summary>
/// <param name="tv">树形控件</param>
/// <param name="dt">数据源控件</param>
/// <param name="NodeText">节点显示的字段名</param>
/// <param name="NodeValue">表主键编码字段名</param>
/// <param name="RootSign">根编码字段名</param>
/// <param name="RootText">显示根的条件内容</param>
public void LoadTreeViewDt(TreeView tv, DataTable dt, string NodeText, string NodeValue, string RootSign, string RootText)
{
//得到根节点信息
DataRow[] DataRoot = dt.Select(RootSign + "='" + RootText + "'");
//循环遍历根节点信息
foreach (DataRow dr in DataRoot)
{
//加载根节点
TreeNode tn = new TreeNode();
tn.Text = dr[NodeText].ToString();
tn.Tag = dr[NodeValue].ToString();
tv.Nodes.Add(tn);
//递归加载子节点
LoadNodes(tn, dr, NodeText, NodeValue, RootSign, dt);
}
}
private void LoadNodes(TreeNode tn, DataRow dr, string NodeText, string NodeValue, string RootSign, DataTable dt)
{
if (dr == null || tn == null) { return; }
//得到子节点信息
DataRow[] DataChild = dt.Select(RootSign + "='" + dr[NodeValue].ToString() + "'");
if (DataChild != null || DataChild.Length > 0)
{
//循环遍历子节点信息
foreach (DataRow drChild in DataChild)
{
//加载子节点
TreeNode tnChild = new TreeNode();
tnChild.Text = drChild[NodeText].ToString();
tnChild.Tag = drChild[NodeValue].ToString();
tn.Nodes.Add(tnChild);
//形成递归
LoadNodes(tnChild, drChild, NodeText, NodeValue, RootSign, dt);
}
}
}
#endregion