Id
PId
ItemName
这是数据库的结构怎么用递归还原数据库里的菜单啊不能用DataReader把?最好有个例子 谢谢

解决方案 »

  1.   

    用循环就可以了,第一次输出第一级,然后第二第三,依次类推,如
    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++)
               {
                 //输出三级菜单
               }
          }
    }
      

  2.   

    No, I think we should use recursion to implement it.
      

  3.   

    晕,随便一个treeview的代码例子就是你要的
      

  4.   

    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);
    }
    }
    }
    }
      

  5.   

    有不用treeview的么?????
    太不灵活
    要在tree上实现增删改
    asp上实现挺简单的
    换了.net反而更困难了
      

  6.   

    另外 TreeView的问题: 怎么让菜单 变成纯文本的 不要鼠标效果  有属性控制么? 要是用css解决,请给两句代码 谢谢