关于无限级菜单
Id
PId
ItemName
这是数据库的结构
怎么用递归还原数据库里的菜单啊
不能用DataReader把?
最好有个例子 谢谢
问题点数:50、回复次数:11Top
1 楼eyis(光芒上线)回复于 2005-09-26 15:29:01 得分 0
用xml实现也行Top
2 楼pmmx(胖子)回复于 2005-09-26 17:44:37 得分 0
markTop
3 楼singlepine(小山)回复于 2005-09-26 20:47:35 得分 50
用循环就可以了,第一次输出第一级,然后第二第三,依次类推,如
string sql="";
sql ="select * from tablename where PId="+一级菜单参数;
for(int i=0;i<一级菜单总数目;i++)
{
//输出一级菜单,一级[i]
sql ="select * from tablename where PId="+二级菜单参数;
for(int i=0;i<二级菜单总数目;i++)
{
//输出二级菜单
sql ="select * from tablename where PId="+三级菜单参数;
for(int i=0;i<三级级菜单总数目;i++)
{
//输出三级菜单
}
}
}Top
4 楼kisshere(( One of my personalities is shameless ))回复于 2005-09-26 22:25:00 得分 0
No, I think we should use recursion to implement it.Top
5 楼winter7171(小木)回复于 2005-09-27 00:41:15 得分 0
小山同学那个似乎不能实现无限级吧,还是要用递归Top
6 楼eyis(光芒上线)回复于 2005-09-27 11:08:07 得分 0
要无限级啊~~~Top
7 楼wanghui0380(放歌)回复于 2005-09-27 11:25:22 得分 0
晕,随便一个treeview的代码例子就是你要的Top
8 楼wanghui0380(放歌)回复于 2005-09-27 11:27:22 得分 0
public class admin_subTreeView : System.Web.UI.Page
{
protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
protected DataTable dataTbl1,dataTbl2;
protected int deep=1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
//InitRootNodeDataTable();
InitTreeRootNode(TreeView1.Nodes);
TreeView1.ExpandLevel = 1;
// TreeView1.Nodes[80].Expanded=true;
// InitTree(TreeView1.Nodes,"0");
}
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void InitTreeRootNode(TreeNodeCollection TNC)
{
huoz.subIndex myauth=new huoz.subIndex();
DataView dataView = new DataView();
dataView = myauth.subIndexType();
{
foreach(DataRowView drv in dataView)
{
string tempxx="";
TreeNode tn = new TreeNode();
tn.ID = drv["type"].ToString().Trim();
switch(drv["type"].ToString().Trim())
{
case "1":
tempxx="网站推介页面";
break;
case "2":
tempxx="信息服务分销";
break;
case "3":
tempxx="增值产品分销 ";
break;
case "4":
tempxx=" SOHO项目搜索";
break;
}
tn.Text = "<span onmousemove=javascript:title=''>"+tempxx+"</span>";
//tn.ImageUrl = GetIcon(drv["ClassType"].ToString());
tn.NavigateUrl = "admin_subView.aspx?Action=1&type="+drv["type"].ToString().Trim();
tn.Target = "mainFrame";
TNC.Add(tn);
//InitChildNodeDataTable(Int32.Parse(tn.ID.ToString()));
InitTreeChildNode(tn.Nodes,tn.ID,0);
}
}
dataTbl1 = null;
dataTbl2 = null;
}
private void InitTreeChildNode(TreeNodeCollection TNC,string classParentID, int con)
{
DataView dataView = new DataView();
if(con==0)
{
huoz.subIndex myauth=new huoz.subIndex();
dataView= myauth.subIndexTreeview(classParentID);
}
else
{
huoz.subIndex myauth=new huoz.subIndex();
dataView= myauth.subIndexTreeview1(classParentID);
}
foreach(DataRowView drv in dataView)
{
TreeNode tn = new TreeNode();
tn.ID = drv["id"].ToString().Trim();
tn.Text = "<span onmousemove=javascript:title='"+drv["name"].ToString().Trim()+"'>"+drv["name"].ToString().Trim()+"</span>";
//tn.ImageUrl = GetIcon(drv["ClassType"].ToString());
tn.NavigateUrl = "admin_subView.aspx?Action=1&ClassID="+drv["id"].ToString().Trim();
tn.Target = "mainFrame";
TNC.Add(tn);
InitTreeChildNode(tn.Nodes,tn.ID,1);
}
}
}
}Top
9 楼eyis(光芒上线)回复于 2005-09-27 13:33:06 得分 0
有不用treeview的么?????
太不灵活
要在tree上实现增删改
asp上实现挺简单的
换了.net反而更困难了Top
10 楼eyis(光芒上线)回复于 2005-09-27 15:14:27 得分 0
另外 TreeView的问题:
怎么让菜单 变成纯文本的 不要鼠标效果
有属性控制么?
要是用css解决,请给两句代码 谢谢Top
11 楼eyis(光芒上线)回复于 2005-09-28 08:50:45 得分 0
问题没解决 DDDTop




