数据集的格式如下:行的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[] arrTag = new String[2];
arrTag[0] = vDRV.Row["rid"].ToString(); //流水号
arrTag[1] = vDRV.Row["LayNo"].ToString(); //层次代码
rootTreeNode.Tag = arrTag;
CreateTreeNode(vDataView, rootTreeNode);
}
}
///
/// 利用递归生成树
///
改方法主要用于生成根节点的子结点及其子节点的子结点
// 获取默认视图
/// TreeView控件节点引用
private static void CreateTreeNode(DataView vDataView, TreeNode parentNode)
{
DataRowView[] arrDRV = vDataView.FindRows(((String[])parentNode.Tag)[1]); //找出同一父节点的所有子节点
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[] arrTag = new String[2];
arrTag[0] = vDRV.Row["rid"].ToString(); //流水号 唯一值
arrTag[1] = vDRV.Row["LayNo"].ToString(); //层次代码
tmpTreeNode.Tag = arrTag;
CreateTreeNode(vDataView, tmpTreeNode); //进入递归
}
}