根据数据库的值,加载XML的数据到TreeView
- C# code
<Root ID="OSMS" > <node ID="SMCG" Text="公告管理" ImageUrl="images/info.gif" Expanded="true" src="#"> <node ID="CGXXGL" Text="发部公告" ImageUrl="images/info.gif" src="Public Notice/PublicNotice_Add.aspx" /> <node ID="XSXXGL" Text="删除公告" ImageUrl="images/info.gif" src="Public Notice/PublicNotice_Del.aspx" /> <node ID="XSXXGL" Text="编辑公告" ImageUrl="images/info.gif" src="Public Notice/PublicNoticeEdit.aspx" /> <node ID="XSXXGL" Text="查询公告" ImageUrl="images/info.gif" src="Public Notice/PublicNoticeView.aspx" /> <node> [code=C#]
[/code]
比如我数据库中取出来的值是和Root ID ="OSMS"的ID值一样,就把Note节点的所有数据加载到TreeView这个
怎么实现啊!
下面是目前所实现代码,但我还是认为里面少了一个调用方法,不知写哪里好,请大家给你看看
- C# code
private void BuildTree()
{
tree_fromXML(Server.MapPath("ManageTree.xml"));
}
private void tree_fromXML(string XMLpath)
{
System.Xml.XmlDocument document = new System.Xml.XmlDataDocument();
document.Load(XMLpath); //xml文件加载到内存
Build_tree(document.DocumentElement, MyTreeView.Nodes);
}
private void Build_tree(System.Xml.XmlNode document, TreeNodeCollection nodes)
{
foreach (System.Xml.XmlNode node in document.ChildNodes)
{
if (node.Attributes["ID"].Value=="OSMS")
{
if (node.FirstChild.Attributes["ID"].Value == "SMCG")
{
TreeNode new_child = new TreeNode();
new_child.Text = node.FirstChild.Attributes["Text"].Value;
if (node.FirstChild.Attributes["ImageUrl"] != null && node.FirstChild.Attributes["ImageUrl"].Value != "")
new_child.ImageUrl = node.FirstChild.Attributes["ImageUrl"].Value;
if (node.FirstChild.Attributes["src"].Value.Trim() != "#")
{
//new_child.Target = "frameColumn";
new_child.NavigateUrl = node.FirstChild.Attributes["src"].Value;
}
else
{
new_child.SelectAction = TreeNodeSelectAction.Expand;
}
new_child.Value = node.FirstChild.Attributes["ID"].Value;
nodes.Add(new_child);
Build_tree(node, new_child.ChildNodes);
}
}
}
}
[解决办法]
最后那句是要递归吗?
我觉得一个循环就够了吧
第一步 从XML中找到符合条件的Root ID,清空Treeview
第二步 遍历这个符合条件的数据块 找到node ID="SMCG"作为父节点
第三步 找到这个数据块中的node ID="XSXXGL" 作为node ID="SMCG"的子节点
然后TreeView1.Nodes.Add(Tnode)
[解决办法]
转成C#(未调试,不知道对不对)
- C# code
DataTable dt = new DataTable(); dt = db.BindTree(DDList_GroupName.Text); //根据选择的组来重新生成树,返回的是一个datatable if (dt == null | dt.Rows.Count == 0) return; TreeView1.Nodes.Clear(); int i = 0; int j = 0; for (i = 0; i <= dt.Rows.Count - 1; i++) { //为0就是跟节点 if (dt.Rows(i)("MenuLV") == 0) { TreeNode Tnode = new TreeNode(); Tnode.Text = dt.Rows(i)("MenuName").ToString.Trim; //根节点的名称(比如公告管理) for (j = 0; j <= dt.Rows.Count - 1; j++) { if (j != i) { //是否添加子节点的一些条件 if (string.Equals(dt.Rows(j)("MenuFather"), dt.Rows(i)("MenuName")) & (int)dt.Rows(j)("MenuLV") == 1 & (bool)dt.Rows(j)("MenuShow") == true) { TreeNode Tnode_Child = new TreeNode(); //定义个新的TreeNode Tnode_Child.Text = dt.Rows(j)("MenuName"); Tnode_Child.Value = dt.Rows(j)("MenuAddress").ToString.Trim; Tnode_Child.Target = dt.Rows(j)("MenuTarget").ToString.Trim; Tnode.ChildNodes.Add(Tnode_Child); Tnode_Child = null; } } } TreeView1.Nodes.Add(Tnode); //绑定到Treeview上 Tnode = null; } } //循环完成后Treeview也就生成完毕了 dt.Dispose(); TreeView1.ExpandAll();
[解决办法]如需要阅读该回复,请登录或注册CSDN!