using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using DataProvider;
using WavenetWebFrameWork.FrameWorkBase.PageBase;namespace WaveDBMS
{
    public partial class NewMenu : System.Web.UI.Page
    {
        #region ARGS        private TreeNode[] treF, treC,treGs;
        private TreeNode treG;
        private string[] strF, strC,strCL,strGs,strGsL;
        private string strCon,strDBType,strUID;
        protected DataProviderFactory dpf;
        private string strSqlF, strSqlC, strSqlGs;
        private DataTable dtF,dtC,dtGs;
        private int intFRowsLength, intCRowsLength, intGsRowsLength;
        PageBase pb = new PageBase();        public string UserID
        {
            get { return strUID; }
            set { strUID = value; }
        }        #endregion        protected void Page_Load(object sender, EventArgs e)
        {
            strCon = System.Configuration.ConfigurationSettings.AppSettings.Get("UserAppData");
            strDBType = System.Configuration.ConfigurationSettings.AppSettings.Get("UserAppDataType");
            strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"" + strCon + "\";Persist Security Info=True";
            strCon = pb.userappdata;
            dpf = new DataProviderFactory(strDBType, strCon, "");
            strUID = "1";
            if(!IsPostBack)
            {
                treG = new TreeNode();
                treG.Text = "排水行业数据库";
                treG.ImageUrl = "~/Images/database1.gif";
                this.TreeV.Nodes.Add(treG);
                this.BuildTrees();
            }            
        }        protected void BuildTrees()
        {
            strSqlF = "SELECT ID,MENUNAME,LINKURL FROM MENU WHERE PARENTID=-1";
            String strSqlF4 = "";
            strSqlF4 = "SELECT MENU.ID AS AA,MENU.MENUNAME AS BB,MENU.LINKURL AS CC,MENU.PARENTID AS DD ";
            strSqlF4 += " FROM MENU,RULES,ROLE2RULE ";
            strSqlF4 += " WHERE MENU.ID     = RULES.MENUID ";
            strSqlF4 += " AND RULES.RULEID =  ROLE2RULE.RULEID";
            strSqlF4 += " AND ROLE2RULE.ROLEID = "+strUID ;
            strSqlF4 += " AND ROLE2RULE.RULEACTIONVALUE=1";
            //strSqlF = "SELECT MENU2.AA,MENU2.BB,MENU2.CC,MENU2.DD FROM (" + strSqlF4 + ") MENU2 WHERE MENU2.DD=-1";
            dtF = dpf.GetData(strSqlF);
            
            intFRowsLength = dtF.Rows.Count;
            if (intFRowsLength < 1)
            {
                return;
            }
            strF = new string[intFRowsLength];
            treF = new TreeNode[intFRowsLength];
            for (int i = 0; i < intFRowsLength  ; i++)
            {
                strF[i] = dtF.Rows[i][1].ToString();
                treF[i] = new TreeNode();
                treF[i].Text=strF[i];
                treF[i].CollapseAll();
                treF[i].ImageUrl = "~/Images/database2.gif";
                this.treG.ChildNodes.Add(treF[i]);
                //////////////////
                strSqlC = "SELECT ID,MENUNAME,LINKURL FROM MENU WHERE PARENTID=" + dtF.Rows[i][0].ToString();
                //strSqlC = "SELECT MENU2.AA,MENU2.BB,MENU2.CC,MENU2.DD FROM (" + strSqlF4 + ") MENU2 WHERE MENU2.DD=" + dtF.Rows[i][0].ToString();
                dtC = dpf.GetData(strSqlC);
                intCRowsLength = dtC.Rows.Count;
                strC = new string[intCRowsLength];
                strCL = new string[intCRowsLength];
                treC = new TreeNode[intCRowsLength];
                for (int j = 0; j < intCRowsLength  ; j++)
                {
                    strSqlGs = "SELECT ID,MENUNAME,LINKURL FROM MENU WHERE PARENTID=" + dtC.Rows[j][0].ToString();
                    dtGs = dpf.GetData(strSqlGs);
                    intGsRowsLength = dtGs.Rows.Count;                    strC[j] = dtC.Rows[j][1].ToString();
                    strCL[j] = dtC.Rows[j][2].ToString();
                    treC[j] = new TreeNode();
                    treC[j].CollapseAll();
                    treC[j].Text = strC[j];                    
                    treC[j].NavigateUrl = strCL[j];
                    treC[j].Target = "MainData";
                    treC[j].ImageUrl = "~/Images/database3.gif";
                    if (intGsRowsLength>0)
                    {
                        treC[j].ImageUrl = "~/Images/database2.gif";
                    }                    
                    treF[i].ChildNodes.Add(treC[j]);
                    /////
                    if (intGsRowsLength == 0)
                    {
                        continue;
                    }
                    strGs  = new string[intGsRowsLength];
                    strGsL = new string[intGsRowsLength];
                    treGs  = new TreeNode[intGsRowsLength];
                    for (int h = 0; h < intGsRowsLength; h++)
                    {
                        strGs[h] = dtGs.Rows[h][1].ToString();
                        strGsL[h] = dtGs.Rows[h][2].ToString();
                        treGs[h] = new TreeNode();
                        treGs[h].Text = strGs[h];
                        treGs[h].NavigateUrl = strGsL[h];
                        treGs[h].Target = "MainData";
                        treGs[h].ImageUrl = "~/Images/database3.gif";
                        treC[j].ChildNodes.Add(treGs[h]);
                    }
                }
            }
        }
    }
}

解决方案 »

  1.   

    用XML存储数据,用TREEVIEW绑定就行了,如果还要进行权限设置的话,再建个关联表根据表里设定的菜单展现
      

  2.   


    if ( !this.Page.IsPostBack )
            {
                string MySQL = "select funcname,funccname from pdefNetRight order by OrderID";
                SqlDataReader MyReader = MydbClass.MyReturnReader(MySQL);          //调用函数MyReturnReader返回给MyReader(这里调用自已写的类。)            try
                {
                    //对用户权限判断,进行对Tree的控制
                    while (MyReader.Read())
                    {
                            TreeNode MyNodes = new TreeNode();
                            MyNodes.Text = MyReader["funccname"].ToString();
                            MyNodes.NavigateUrl = MyReader["funcname"].ToString();
                            Tree1.Nodes.Add(MyNodes);
                        }
                    }            }
                catch
                {
                    MydbClass.MyConClose();          //关闭MyReader数据集
                    return;
                }
            }
    楼主这是最基本的邦定例子
      

  3.   


    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class TKKMTest_KnowDotMenu : BasePage
    {
        public string strNav = "../KnowDot/KnowDotEdit.aspx?editmode=unable&kminfo={0}&pkdinfo={1}";
        private int _kmID;
        private DataTable dt = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                //判断kmID是否为空或者是否为正整数
                if (Request.QueryString["kmID"] != null && InterService.Utility.ValidateHelper.IsInteger(Request.QueryString["kmID"]) == true)
                {
                    _kmID = int.Parse(Request.QueryString["kmID"]);
                }
                else
                {
                    InterService.Utility.Utils.throwErrorAndClose("kmID参数类型不对","parent");
                }
                ShowKnowDotTree();
            }
        }    #region 生成知识点树
        /// <summary>
        /// 生成知识点树
        /// </summary>
        private void ShowKnowDotTree()
        {
            try
            {
                InterService.TestBll.TestKnowDotBz tkdb = new InterService.TestBll.TestKnowDotBz();
                dt = tkdb.getData(_kmID);
            }
            catch (Exception ex) //如果出现异常,则提示用户
            {
                InterService.Utility.Utils.throwErrorAndClose("生成知识点树失败:" + ex.Message,"parent");
                return;
            }
            if (dt==null || dt.Rows.Count == 0) //如果为空,则说明当前科目下没有相应的知识点
            {
                string kmtm = _kmID.ToString() + "~" + Request["KMName"];
                strNav = string.Format(strNav, HttpUtility.UrlEncode(kmtm), HttpUtility.UrlEncode("0~无"));
                InterService.Utility.Utils.throwErrorAndClose("不存在该科目下的知识点,请先新建知识点", "parent");
                //InterService.Utility.Utils.throwErrorGotoURL("不存在该科目下的知识点,请先新建知识点", strNav, "parent");
                return;
            }
            else
            {
                TreeNode node = new TreeNode();
                DataRow[] dr = dt.Select("I_ParentID=0", "I_OrderID");//筛选得到所有的根结点
                this.KnowDotTreeView.ShowLines = true;
                BindKnowDotTree(dr, node);
            }    }
        /// <summary>
        /// 递归生成知识点树
        /// </summary>
        /// <param name="dr">DataRow[]数组,经过DataTable.Select筛选</param>
        /// <param name="node">当前节点</param>
        private void BindKnowDotTree(DataRow[] dr, TreeNode node)
        {
            foreach (DataRow dr1 in dr)
            {
                if (dr1["I_ParentID"].ToString() == "0")//如果是根结点,添加到TreeView控件
                {
                    TreeNode node1 = new TreeNode();
                    node1.Text = dr1["C_KDName"].ToString();
                    node1.Value = dr1["I_ParentID"].ToString();
                    if (dr1["C_ChildIDs"].ToString().Trim() != "")//判断是否含有子结点,如果有,提示:“请选择具体的知识点”
                    {
                        node1.NavigateUrl = "javascript:alert('请选择具体的知识点');";
                    }
                    else
                    {
                        node1.NavigateUrl = "javascript:parent.main.form1.txtKnowDot.value='" + dr1["C_KDName"].ToString() + "';parent.main.form1.txtKDID.value='" + dr1["I_KDID"].ToString() + "';parent.main.form1.HKDCode.value='" + dr1["C_KDCode"].ToString() + "';";
                    }
                    node1.Target = "top";
                    this.KnowDotTreeView.Nodes.Add(node1);
                    BindKnowDotTree(dt.Select("I_ParentID=" + dr1["I_KDID"].ToString(), "I_OrderID"), node1);//递归生成子树
                }
                else//否则添加到当前结点
                {
                    TreeNode node1 = new TreeNode();
                    node1.Text = dr1["C_KDName"].ToString();
                    node1.Value = dr1["I_ParentID"].ToString();
                    if (dr1["C_ChildIDs"].ToString().Trim() != "")
                    {
                        node1.NavigateUrl = "javascript:alert('请选择具体的知识点');";
                    }
                    else
                    {
                        node1.NavigateUrl = "javascript:parent.main.form1.txtKnowDot.value='" + dr1["C_KDName"].ToString() + "';parent.main.form1.txtKDID.value='" + dr1["I_KDID"].ToString() + "';parent.main.form1.HKDCode.value='" + dr1["C_KDCode"].ToString() + "';";
                    }
                    node1.Target = "top";
                    node.ChildNodes.Add(node1);
                    BindKnowDotTree(dt.Select("I_ParentID=" + dr1["I_KDID"].ToString(), "I_OrderID"), node1);//递归生成子树
                }
            }
        }
        #endregion
    }供你参考!