层次编号 父节点编号
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); //进入递归 } }