数据表的格式如下:
行的ParentLayNo值等于父节点的LayNo值
层次编号 父节点编号
LayNo ParentLayNo
0001 0
0001001 0001
0001002 0001
///
/// 生成树,添加顶级节点
///
/// 用户TreeView控件
/// 数据表结果集
public static void createTree(TreeView vTreeView, DataTable vDataTable)
{
DataView vDataView = vDataTable.DefaultView; //获取默认视图
vDataView.Sort = "ParentLayNo ASC"; //根据父节点字段排序
DataRowView[] arrDRV = vDataView.FindRows(0); //树根节点的父亲节点必须是0
if (arrDRV.Length == 0) //如果没有儿子节点则直接返回
return;
TreeNode rootTreeNode = null;
foreach (DataRowView vDRV in arrDRV)
{
rootTreeNode = new TreeNode(vDRV.Row[TableConfig.T_PUB_NAME[0]].ToString());//参数为显示的信息
vTreeView.Nodes.Add(rootTreeNode);
string layNo = vDRV.Row["layNo"].ToString(); //层次代码
rootTreeNode.Value = layNo;//和winform的区别
CreateTreeNode(vDataView, rootTreeNode);
}
}
///
/// 利用递归生成树
///
/// 获取默认视图
/// TreeView控件节点引用
private static void CreateTreeNode(DataView vDataView, TreeNode parentNode)
{
DataRowView[] arrDRV = vDataView.FindRows(parentNode.Value//找出同一父节点的所有子节点
if (arrDRV.Length == 0) //如果没有儿子节点则直接返回
return;
TreeNode tmpTreeNode = null;
foreach (DataRowView vDRV in arrDRV)
{
tmpTreeNode = new TreeNode(vDRV.Row[TableConfig.T_PUB_NAME[0]].ToString());//参数为显示的信息
parentNode.Nodes.Add(tmpTreeNode);//添加节点
string layNo = vDRV.Row["layNo"].ToString(); //层次代码
tmpTreeNode.Value = layNo;//和winform的区别
CreateTreeNode(vDataView, tmpTreeNode); //进入递归
}
}