作者:速度coinmer | 来源:互联网 | 2023-05-28 19:49
刚我在做Tree view 绑定时自己摸索了一下,网上有人说TreeView绑定数据源,用什么递归绑定啥的,我不想看了,就自己试着写了一个我是这样做的,如果有什么问题请大神指导,我是菜鸟额..1:页面
刚我在做Tree view 绑定时自己摸索了一下,网上有人说TreeView绑定数据源,用什么递归绑定啥的,我不想看了,就自己试着写了一个
我是这样做的,如果有什么问题请大神指导,我是菜鸟额..
1:页面TreeView 叫tvFunction
2:新建 adminFunction.xml
?xml version="1.0" encoding="utf-8" ?
functions
function name="商品发布" url="~/page/leaves/leave.aspx"
subfunction name="添加商品" url="~/page/leaves/leave.aspx"
/subfunction
subfunction name="添加商品" url="~/page/leaves/leave.aspx"
/subfunction
/function
function name="留言发布" url="~/page/leaves/leave.aspx"
subfunction name="添加留言" url="~/page/leaves/leave.aspx"
/subfunction
subfunction name="修改留言" url="~/page/leaves/leave.aspx"
/subfunction
/function
/functions
3:页面绑定
/// summary
/// 初始化功能树结构
/// /summary
private void InitFunction()
{
XmlDocument xmldoc = new XmlDocument();
string xmlPath = "~/adminFunction.xml";
xmlPath = Server.MapPath(xmlPath);
xmldoc.Load(xmlPath);
XmlNode root = xmldoc.DocumentElement;
foreach (XmlNode node in root.ChildNodes)
{
//获取父节点的信息显示(轻狂-书生)
XmlElement x1 = node as XmlElement;
string name = x1.GetAttribute("name");
string url = x1.GetAttribute("url");
TreeNode tn = new TreeNode();
tn.Text = name;
tn.NavigateUrl = url;
foreach (XmlNode subnode in x1.ChildNodes)
{
XmlElement subxmlEmt = subnode as XmlElement;
string subname = subxmlEmt.GetAttribute("name");
string suburl = subxmlEmt.GetAttribute("url");
TreeNode subtn = new TreeNode();
subtn.Text = subname;
subtn.NavigateUrl = suburl;
tn.ChildNodes.Add(subtn);
}
tvFunction.Nodes.Add(tn);
}
}
4:显示效果
感觉效果还行,请问我这样做好么?有什么更好的方式么?请指教,谢谢了..
----修改后的版本
根据大神们的指导,我晚上回来试了下递归(全手打)
方法如下
1:XML改为
?xml version="1.0" encoding="utf-8" ?
functions
function name="商品发布" url="~/page/leaves/leave.aspx"
subfunction name="添加商品" url="~/page/leaves/leave.aspx"
subfunction1 name="" url="~/page/leaves/leave.aspx"
subfunction2 name="" url="~/page/leaves/leave.aspx"
/subfunction2
subfunction2 name="" url="~/page/leaves/leave.aspx"
/subfunction2
/subfunction1
subfunction1 name="" url="~/page/leaves/leave.aspx"
/subfunction1
/subfunction
subfunction name="添加商品" url="~/page/leaves/leave.aspx"
/subfunction
/function
function name="留言发布" url="~/page/leaves/leave.aspx"
subfunction name="添加留言" url="~/page/leaves/leave.aspx"
/subfunction
subfunction name="修改留言" url="~/page/leaves/leave.aspx"
/subfunction
/function
/functions
2:后台代码
/// summary
/// 初始化功能树结构
/// /summary
private void InitFunction()
{
XmlDocument xmldoc = new XmlDocument();
string xmlPath = "~/adminFunction.xml";
xmlPath = Server.MapPath(xmlPath);
xmldoc.Load(xmlPath);
XmlNode root = xmldoc.DocumentElement;
tvFunction.Nodes.Add(CreateNode(root,new TreeNode()));
}
/// summary
/// 递归方法产生树(create by 轻狂书生)
/// /summary
/// param name="root" 根节点 /param
/// param name="tn" 根节点对应的树节点 /param
/// returns /returns
private TreeNode CreateNode(XmlNode root, TreeNode tn)
foreach (XmlNode node in root.ChildNodes)
{
XmlElement subxmlEmt = node as XmlElement;
string subname = subxmlEmt.GetAttribute("name");
string suburl = subxmlEmt.GetAttribute("url");
TreeNode subtn = new TreeNode();
subtn.Text = subname;
subtn.NavigateUrl = suburl;
if (node.HasChildNodes)
{
subtn.ChildNodes.Add(CreateNode(node,subtn));
}
tn.ChildNodes.Add(subtn);
}
return tn;
}
3:产生的效果图如下
4:为了去除根节点的显示,好像只能用个循环了,修改如下
/// summary
/// 初始化功能树结构
/// /summary
private void InitFunction()
{
XmlDocument xmldoc = new XmlDocument();
string xmlPath = "~/adminFunction.xml";
xmlPath = Server.MapPath(xmlPath);
xmldoc.Load(xmlPath);
XmlNode root = xmldoc.DocumentElement;
foreach (XmlNode node in root.ChildNodes)
{
XmlElement subxmlEmt = node as XmlElement;
string subname = subxmlEmt.GetAttribute("name");
string suburl = subxmlEmt.GetAttribute("url");
TreeNode subtn = new TreeNode();
subtn.Text = subname;
subtn.NavigateUrl = suburl;
tvFunction.Nodes.Add(CreateNode(node, subtn));
}
}
5:显示效果如下
达到了预期的效果哦,呵呵,请问方法有什么可以改进的么?请大神各抒己见..test类别