下面介紹個人在開發中用到的兩種無限級菜單的展示方式,第一種是將菜單放置到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控制項等.資料庫結構如下所示.