我数据库里面有一张表是保存的菜单信息,其实很简单,就是一个菜单组和子菜单,绑定方式如下:
using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using AGV.BLL; using System.Drawing; using System.Net; public partial class left : System.Web.UI.Page { DataTable dt_Role = new DataTable(); protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string cookies_User = Request.Cookies["USER_COOKIE"]["UserName"]; dt_Role = new sys_SetRoleManager().GetUserRoleByUserID(cookies_User); DataTable newdt = new DataTable(); newdt = dt_Role.Clone(); newdt = dt_Role.DefaultView.ToTable(true, "MenuGroupName"); tvMenu.ShowLines = true; foreach (DataRow i in newdt.Rows) { TreeNode leveNode1 = new TreeNode(); leveNode1.Text = i["MenuGroupName"].ToString(); leveNode1.ImageUrl = "~/Images/TreeViewPic/web2.png"; leveNode1.Expanded = false; leveNode1.SelectAction = TreeNodeSelectAction.Expand; tvMenu.Nodes.Add(leveNode1); } for (int i = 0; i < tvMenu.Nodes.Count; i++) { for (int j = 0; j < dt_Role.Rows.Count; j++) { if (tvMenu.Nodes[i].Text.Trim() == dt_Role.Rows[j]["MenuGroupName"].ToString()) { TreeNode tn = new TreeNode(); tn.Text = dt_Role.Rows[j]["FunctionName"].ToString(); tn.NavigateUrl = dt_Role.Rows[j]["FrmUrl"].ToString(); tn.ImageUrl = "~/Images/TreeViewPic/Foote.png"; tvMenu.Nodes[i].ChildNodes.Add(tn); } } } } } }
效果是这样的:
现在有一个问题,就是我想要获取TreeView节点的值的时候发现父节点的Value属性是绑定的数据库中的“Name”字段,而子节点绑定的确实数据库中的“ID”字段,这是怎么回事?
如下图,我想要的是父节点和子节点得到的都是ID,
父节点的值:
子节点的值:
TreeNode有Text和Value两个属性,请明确指定Value属性对应的值即可
父节点的Text属性和Value属性都是一样的,但是子节点的Text属性和Value属性就不一样。
楼上正解,要是你的不一样,可能是循环赋值的时候出左了。你可以调试下啊。
我后来重新从数据库获取了一张Table,主菜单和数据源和子菜单的数据源分开的,就没问题了。