|
本帖最后由 Primates 于 2016-1-12 23:42 编辑
我的Tree数据表结构如下:
MenuID | MenuName | MenuURL | ParentID | MenuIcon | MenuLevel | MenuSort | ....
----
楼主的表和上述大同小异,Tree控件需要取两个字段,分别是 MenuID 和 ParentID ,采用.Net的 DataSet 的 Relations 进行关联(下文红色代码):
public void GetMenuTree(DataTable menusDataTable,FineUI.Tree menuTree)
{
DataSet ds = new DataSet();
ds.Tables.Add(menusDataTable);
ds.Relations.Add("TreeRelation", ds.Tables[0].Columns["MenuId"], ds.Tables[0].Columns["ParentId"]);
foreach (DataRow row in ds.Tables[0].Rows)
{
if (row.IsNull("ParentId"))
{
TreeNode node = new TreeNode();
node.Text = row["MenuName"].ToString();
node.IconUrl = row["MenuIcon"].ToString();
node.Expanded = true;
menuTree.Nodes.Add(node);
ResolveSubTree(row, node);
}
}
}
protected void ResolveSubTree(DataRow dataRow, TreeNode treeNode)
{
DataRow[] rows = dataRow.GetChildRows("TreeRelation");
if (rows.Length > 0)
{
treeNode.Expanded = false;
foreach (DataRow row in rows)
{
TreeNode node = new TreeNode();
node.Text = row["MenuName"].ToString();
node.NavigateUrl = row["MenuURL"].ToString();
node.IconUrl = row["MenuIcon"].ToString();
treeNode.Nodes.Add(node);
ResolveSubTree(row, node);
}
}
}-----
注:FineUI 的 Tree 控件似乎(是似乎,仅是个人体验,没有官方确认)要求 ParentID 的顶级ID为 NULL —— 这句话不知道说清楚了没有。楼主提出来的数据库表 Tree_Pre 字段的顶级 ID 是数字0,会导致 ds.Relations.Add("TreeRelation", ds.Tables[0].Columns["MenuId"], ds.Tables[0].Columns["ParentId"]); 无法创建关联,因为 MenuID 的最小值为 1,ParentID 不可能指向 0 。
-----
本人学艺不精,只知道这些,希望对你有帮助。
|
|