Dynamically Binding Menus to TreeView

First:

Create a table:

 --用户表
--目录参考:
--父结点1
 +--孩子结点1
 +---孩子结点2
 +--孩子结点3
--父结点2
 +--孩子结点1
 +--孩子结点2

if object_id('tb_menu','U')>0
drop table tb_menu

create table tb_menu       --目录表
(
 id   int identity(1,1)primary key, --@编号
 menuowner int not null,     --*目录所有者【系统管理员|教务人员|教师/辅导员|学生】
 menudeep int not null,     --*目录层次
 menuname varchar(50) not null,   --*目录名
 menuparent varchar(50) ,     --*目录父结点,父结点为空时表明此目录为根目录
 urlname  varchar(50)      --目录对应的链接名
)
go

 

 

then in Model layer,write codes as follows:

//------------------------------------------------------------------------------
// <auto-generated>
//     此代码由工具生成。
//     运行库版本:2.0.50727.1433
//
//     对此文件的更改可能会导致不正确的行为,并且如果
//     重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Text;
using ISS.WDC.Framework.Data;
using ISS.WDC.Framework.Data.OM;
using ISS.WDC.Framework.Data.OM.OMAttribute;
using ISS.WDC.Framework.Data.OM.Collections;
using ISS.WDC.Framework.Data.OM.Transaction;
using ISS.WDC.Project.BaseItem;


namespace EAMS.Model
{


    /// <summary>
    /// tb_menu 实体
    /// </summary>
    [Serializable()]
    [DataTable("tb_menu")]
    public class tb_menu : Entity
    {

        private int _id;

        /// <summary>
        /// 字段名称 id
        /// </summary>
        public static string M_id = "id";

        private int _menuowner;

        /// <summary>
        /// 字段名称 menuowner
        /// </summary>
        public static string M_menuowner = "menuowner";

        private int _menudeep;

        /// <summary>
        /// 字段名称 menudeep
        /// </summary>
        public static string M_menudeep = "menudeep";

        private string _menuname;

        /// <summary>
        /// 字段名称 menuname
        /// </summary>
        public static string M_menuname = "menuname";

        private string _menuparent;

        /// <summary>
        /// 字段名称 menuparent
        /// </summary>
        public static string M_menuparent = "menuparent";
        /// <summary>
        /// 字段名称 urlname
        /// </summary>
        public static string M_urlname = "urlname";
        private string _urlname;
        /// <summary>
        /// id
        /// </summary>
        [DataField("id", "System.Int32", false, true, true, "Int32", "SEQ_tb_menu_PK")]
        public int id
        {
            get
            {
                return this._id;
            }
            set
            {
                this._id = value;
            }
        }

        /// <summary>
        /// menuowner
        /// </summary>
        [DataField("menuowner", "System.Int32", false, false, false, "Int32")]
        public int menuowner
        {
            get
            {
                return this._menuowner;
            }
            set
            {
                this._menuowner = value;
            }
        }

        /// <summary>
        /// menudeep
        /// </summary>
        [DataField("menudeep", "System.Int32", false, false, false, "Int32")]
        public int menudeep
        {
            get
            {
                return this._menudeep;
            }
            set
            {
                this._menudeep = value;
            }
        }

        /// <summary>
        /// menuname
        /// </summary>
        [DataField("menuname", "System.String", false, false, false, "String")]
        public string menuname
        {
            get
            {
                return this._menuname;
            }
            set
            {
                this._menuname = value;
            }
        }

        /// <summary>
        /// menuparent
        /// </summary>
        [DataField("menuparent", "System.String", false, false, false, "String")]
        public string menuparent
        {
            get
            {
                return this._menuparent;
            }
            set
            {
                this._menuparent = value;
            }
        }
        /// <summary>
        /// urlname
        /// </summary>
        [DataField("urlname", "System.String", false, false, false, "String")]
        public string urlname
        {
            get
            {
                return this._urlname;
            }
            set
            {
                this._urlname = value;
            }
        }
    }
}

then in IDAL layer,write codes:

using System;
using System.Data;
using System.Collections.Generic;
using System.Text;
using EAMS.Model;
using System.Collections;

namespace EAMS.IDAL
{
    public interface INav
    {
        /// <summary>
        /// 显示菜单
        /// </summary>
        /// <param name=""></param>
        /// <returns></returns>
        List<Model.tb_menu> selectNavmenu(int loadtype);
    }
}

and,in DataProFile layer,we override this interface:

using System;
using System.Collections.Generic;
using System.Text;
using EAMS;
using EAMS.IDAL;
using EAMS.Model;
using System.Data;
using System.Data.SqlClient;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
using Microsoft.Practices.EnterpriseLibrary.Common;
using Microsoft.Practices.EnterpriseLibrary.Configuration.Design;

namespace EAMS.DataProFile
{
    public class Nav : INav
    {

        public Nav()
        { }
        Database db = DatabaseFactory.CreateDatabase("Connection String");
        DataSet dst;
        public List<Model.tb_menu> GetNavmenu(DataTable dt)
        {
            List<Model.tb_menu> menu = new List<tb_menu>();
            foreach (DataRow row in dt.Rows)
            {
                Model.tb_menu me = new tb_menu();
                me.id= Convert.ToInt32(row["id"]);
                me.menudeep = Convert.ToInt32(row["menudeep"]);
                me.menuname = Convert.ToString(row["menuname"]);
                me.menuowner = Convert.ToInt32(row["menuowner"]);
                me.menuparent = Convert.ToString(row["menuparent"]);
                me.urlname=Convert.ToString(row["urlname"]);
                menu.Add(me);
            }
            return menu;
        }

        #region INav 成员

        List<Model.tb_menu> INav.selectNavmenu(int loadtype)
        {
            try
            {
                DbCommand dbc = db.GetStoredProcCommand("sp_selectmenu");
                db.AddInParameter(dbc, "@varloadtype ", System.Data.DbType.Int32, loadtype);
                dst = db.ExecuteDataSet(dbc);
                return GetNavmenu(dst.Tables[0]);
            }
            catch (Exception ex)
            {
                string s = ex.Message.ToString();
                throw ex;
            }
        }
        #endregion
    }
}

 

meanwhile,we should code stored procedures:

--显示导航菜单
if exists(select name from Sysobjects where name='sp_selectmenu' and type='P')
drop proc sp_selectmenu
go
create proc sp_selectmenu
@varloadtype int
as
 select id,menuowner,menudeep,menuname,menuparent,urlname
 from tb_menu
 where menuowner=@varloadtype
go

then in BLL layer,we provide this method to public:

using System;
using System.Collections.Generic;
using System.Text;
using EAMS.IDAL;
using System.Web;
using EAMS.Model;
namespace EAMS.BLL
{
    [Serializable]
    public class NavBL
    {
        /// <summary>
        ///
        /// </summary>
        private static readonly INav inav = new EAMS.DataProFile.Nav();

        public List<Model.tb_menu> nav(int loadtype)
        {
            return inav.selectNavmenu(loadtype);
        }
    }
}

 

The last, is that we call functions in BLL layer:

public void LoadMenu(int loadtype)
    {
       
        //根据登录类别,获取目录
        EAMS.BLL.NavBL nb = new NavBL();
        List<EAMS.Model.tb_menu> lstMenu = nb.nav(loadtype);
        //根目录的集合
        List<EAMS.Model.tb_menu> rootmenu = new List<EAMS.Model.tb_menu>();

        string[] sourcepath ={ "SysAdmInterfaceUnique", "ManInterfaceUnique", "TeaInterfaceUnique", "StuInterfaceUnique" };
        foreach (EAMS.Model.tb_menu menu in lstMenu)
        {
            if (menu.menudeep != 1) continue;
            rootmenu.Add(menu);
            TreeNode tn=new TreeNode();
            tn.Text=menu.menuname;
            TrvMenu.Nodes.Add(tn);
            //子目录
            foreach (EAMS.Model.tb_menu submenu in lstMenu)
            {
                if (0==submenu.menuparent.CompareTo(menu.menuname) && submenu.menudeep == 2)
                {
                    TreeNode TnSubMenu = new TreeNode();
                    TnSubMenu.Text = submenu.menuname;
                    //设置链接URL
                    if (submenu.urlname.CompareTo("") != 0)
                    {
                        TnSubMenu.NavigateUrl = "~/" + sourcepath[loadtype] + "/" + submenu.urlname + ".aspx";
                    }
                    tn.ChildNodes.Add(TnSubMenu);
                }
            }
           
        }
        TrvMenu.DataBind();
    }

 

So,All Done!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值