下面介绍个人在开发中用到的两种无限级菜单的展示方式,第一种是将菜单放置到DropDownList控件中,这样直观明了,代码如下:
- privatevoidMakeTree()
- {
- intmainid=0;
- DataTabledt=GetTable(mainid);
- try
- {
- if(dt!=null)
- {
- for(inti=0;i<dt.Rows.Count;i++)
- {
- stringt="|-"+dt.Rows[i]["DEPT_NAME"].ToString().Trim();
- stringv=dt.Rows[i]["ID"].ToString();
- ListItemli=newListItem(t,v);
- this.DropDownList1.Items.Add(li);
- AddSub(int.Parse(dt.Rows[i]["ID"].ToString()),0);
- }
- }
- }
- catch(Exceptionex)
- {
- Response.Write(ex.Message);
- }
- }
- privatevoidAddSub(intpID,intlevel)
- {
- DataTabledt=GetTable(pID);
- try
- {
- if(dt!=null)
- {
- for(inti=0;i<dt.Rows.Count;i++)
- {
- stringblank="| ";
- for(intm=1;m<=level;m++)
- {
- blank=blank+" ";
- }
- stringt=blank+"|-"+dt.Rows[i]["Dept_Name"].ToString();
- stringv=dt.Rows[i]["ID"].ToString();
- ListItemli=newListItem(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(Exceptionex)
- {
- Response.Write(ex.Message);
- }
- }
第二种方式是帮定到TreeView控件中,代码如下:
- privatevoidAddTreeNodes(intpID,TreeNodenode)
- {
- DataTabledt=GetTable(pID);
- try
- {
- if(dt!=null)
- {
- for(inti=0;i<dt.Rows.Count;i++)
- {
- TreeNodenodes=newTreeNode();
- 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(Exceptionex)
- {
- Response.Write(ex.Message);
- }
- }
- protectedvoidMakeTree()
- {
- intmainid=0;
- DataTabledt=GetTable(mainid);
- try
- {
- if(dt!=null)
- {
- for(inti=0;i<dt.Rows.Count;i++)
- {
- TreeNodenodes=newTreeNode();
- 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(Exceptionex)
- {
- Response.Write(ex.Message);
- }
- }
- privateDataTableGetTable(intrefid)
- {
- DataTabledt=newDataTable();
- BussinessDataAccessDBA=newBussinessDataAccess();
- try
- {
- dt=DBA.SelectDataBySql("SELECT*FROMUSER_ADDRESS_DEPTINFOWHEREParentId='"+refid+"'","tablename");
- }
- catch(Exceptionex)
- {
- Response.Write(ex.Message);
- }
- returndt;
- }
还可以绑定到其他的的控件,如Menu,SiteMap控件等.数据库结构如下所示.