下面介绍个人在开发中用到的两种无限级菜单的展示方式,第一种是将菜单放置到DropDownList控件中,这样直观明了,代码如下:
- private void MakeTree()
- {
- int mainid = 0;
- DataTable dt = GetTable(mainid);
- try
- {
- if (dt != null)
- {
- for (int i = 0; i < dt.Rows.Count; i++)
- {
- string t = "|- " + dt.Rows[i]["DEPT_NAME"].ToString().Trim();
- string v = dt.Rows[i]["ID"].ToString();
- ListItem li = new ListItem(t, v);
- this.DropDownList1.Items.Add(li);
- AddSub(int.Parse(dt.Rows[i]["ID"].ToString()), 0);
- }
- }
- }
- catch (Exception ex)
- {
- Response.Write(ex.Message);
- }
- }
- private void AddSub(int pID, int level)
- {
- DataTable dt = GetTable(pID);
- try
- {
- if (dt != null)
- {
- for (int i = 0; i < dt.Rows.Count; i++)
- {
- string blank = "| ";
- for (int m = 1; m <= level; m++)
- {
- blank = blank + " ";
- }
- string t = blank + "|- " + dt.Rows[i]["Dept_Name"].ToString();
- string v = dt.Rows[i]["ID"].ToString();
- ListItem li = new ListItem(t, v);
- this.DropDownList1.Items.Add(li);
- if (dt.Rows.Count > 0)
- {
- AddSub(int.Parse(dt.Rows[i]["ID"].ToString()), level + 1);
- }
- else
- {
- AddSub(int.Parse(dt.Rows[i]["Parentid"].ToString()), level + 1);
- }
- }
- }
- }
- catch (Exception ex)
- {
- Response.Write(ex.Message);
- }
- }
第二种方式是帮定到TreeView控件中,代码如下:
- private void AddTreeNodes(int pID, TreeNode node)
- {
- DataTable dt = GetTable(pID);
- try
- {
- if (dt != null)
- {
- for (int i = 0; i < dt.Rows.Count; i++)
- {
- TreeNode nodes = new TreeNode();
- nodes.Text = dt.Rows[i]["Dept_Name"].ToString();
- nodes.Value = dt.Rows[i]["ID"].ToString();
- node.ChildNodes.Add(nodes);
- if (dt.Rows.Count > 0)
- {
- AddTreeNodes(int.Parse(dt.Rows[i]["ID"].ToString()), nodes);
- }
- else
- {
- AddTreeNodes(int.Parse(dt.Rows[i]["Parentid"].ToString()), nodes);
- }
- }
- }
- }
- catch (Exception ex)
- {
- Response.Write(ex.Message);
- }
- }
- protected void MakeTree()
- {
- int mainid = 0;
- DataTable dt = GetTable(mainid);
- try
- {
- if (dt != null)
- {
- for (int i = 0; i < dt.Rows.Count; i++)
- {
- TreeNode nodes = new TreeNode();
- nodes.Text = dt.Rows[i]["DEPT_NAME"].ToString();
- nodes.Value = dt.Rows[i]["ID"].ToString();
- this.TreeView1.Nodes.Add(nodes);
- AddTreeNodes(int.Parse(dt.Rows[i]["ID"].ToString()), nodes);
- }
- }
- }
- catch (Exception ex)
- {
- Response.Write(ex.Message);
- }
- }
- private DataTable GetTable(int refid)
- {
- DataTable dt = new DataTable();
- BussinessDataAccess DBA = new BussinessDataAccess();
- try
- {
- dt = DBA.SelectDataBySql("SELECT * FROM USER_ADDRESS_DEPTINFO WHERE ParentId = '" + refid + "'", "tablename");
- }
- catch (Exception ex)
- {
- Response.Write(ex.Message);
- }
- return dt;
- }
还可以绑定到其他的的控件,如Menu,SiteMap控件等.数据库结构如下所示.