數據集的格式如下
行的ParentLayNo值等於父節點的LayNo值
層次編號 父節點編號
LayNo ParentLayNo
///
/// 生成樹添加頂級節點
/// 改方法主要用於生成根節點
///
用戶TreeView控件
///
數據表結果集
public static void createTree(TreeView vTreeView DataTable vDataTable)
{
DataView vDataView = vDataTableDefaultView; //獲取默認視圖
vDataViewSort = ParentLayNo ASC; //根據父節點字段排序
DataRowView[] arrDRV = vDataViewFindRows(); //樹根節點的父親節點必須是
if (arrDRVLength == ) //如果沒有兒子節點則直接返回
return;
TreeNode rootTreeNode = null;
foreach (DataRowView vDRV in arrDRV)
{
rootTreeNode = new TreeNode(vDRVRow[TableConfigT_PUB_NAME[]]ToString());//參數為顯示的信息
vTreeViewNodesAdd(rootTreeNode);
String[] arrTag = new String[];
arrTag[] = vDRVRow[rid]ToString(); //流水號
arrTag[] = vDRVRow[LayNo]ToString(); //層次代碼
rootTreeNodeTag = arrTag;
CreateTreeNode(vDataView rootTreeNode);
}
}
///
/// 利用遞歸生成樹
///
改方法主要用於生成根節點的子結點及其子節點的子結點
//
獲取默認視圖
///
TreeView控件節點引用
private static void CreateTreeNode(DataView vDataView TreeNode parentNode)
{
DataRowView[] arrDRV = vDataViewFindRows(((String[])parentNodeTag)[]); //找出同一父節點的所有子節點
if (arrDRVLength == ) //如果沒有兒子節點則直接返回
return;
TreeNode tmpTreeNode = null;
foreach (DataRowView vDRV in arrDRV)
{
tmpTreeNode = new TreeNode(vDRVRow[TableConfigT_PUB_NAME[]]ToString());//參數為顯示的信息
parentNodeNodesAdd(tmpTreeNode);//添加節點
String[] arrTag = new String[];
arrTag[] = vDRVRow[rid]ToString(); //流水號 唯一值
arrTag[] = vDRVRow[LayNo]ToString(); //層次代碼
tmpTreeNodeTag = arrTag;
CreateTreeNode(vDataView tmpTreeNode); //進入遞歸
}
}
From:http://tw.wingwit.com/Article/program/net/201311/11514.html