惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
J
Java Code Geeks
L
LangChain Blog
V
V2EX
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
博客园 - Franky
Microsoft Azure Blog
Microsoft Azure Blog
Jina AI
Jina AI
Blog — PlanetScale
Blog — PlanetScale
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
博客园 - 司徒正美
B
Blog
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
Engineering at Meta
Engineering at Meta
MyScale Blog
MyScale Blog
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog

博客园 - 笨笨熊(梦幻雨儿)

用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 用户中心 - 博客园 Css+Div的选项卡 用户中心 - 博客园
用TreeView控件在无限极节点上用Menu控件做导航菜单显示用户...
笨笨熊(梦幻雨儿) · 2007-12-22 · via 博客园 - 笨笨熊(梦幻雨儿)

menu1.bmp

  11:创建一个数据库并创建表Base_Menu
  2CREATE TABLE [dbo].[Base_Menu](
  3    [menuid] [int] IDENTITY(1,1) NOT NULL,
  4    [menunum] [int] NOT NULL,
  5    [Name] [varchar](50) NOT NULL CONSTRAINT [DF_Base_Menu_MenuName]  DEFAULT (''),
  6    [URL] [varchar](50) NOT NULL CONSTRAINT [DF_Base_Menu_Reserve]  DEFAULT (''),
  7    [Parentid] [int] NULL,
  8    [LogoUrl] [varchar](50) NULL,
  9 CONSTRAINT [PK__Base_Menu__69C6B1F5] PRIMARY KEY CLUSTERED 
 10(
 11    [menuid] ASC
 12)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY],
 13 CONSTRAINT [QU_Base_Menu_menunum] UNIQUE NONCLUSTERED 
 14(
 15    [menunum] ASC
 16)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
 17) ON [PRIMARY]
 18
 19GO
 20
 21
 222:创建sql过程查找上级目录
 23ALTER FUNCTION [dbo].[IsMenuParent](@ParentID INT, @Menuid INT)
 24RETURNS TINYINT
 25BEGIN
 26    DECLARE @Ret TINYINT
 27    DECLARE @P INT
 28    WHILE @Ret IS NULL  ----@Ret是返回值变量
 29    BEGIN
 30        SELECT @P = ParentID FROM base_menu WHERE Menuid = @Menuid
 31        IF @P = @ParentID
 32        BEGIN --如果父节点等于@ParentID,就表示@ParentID是@TypeID的父节点,所以就将返回值设置成1
 33        SET @Ret = 1
 34        END
 35        ELSE
 36        BEGIN
 37        IF @P = 0 OR @P IS NULL
 38    BEGIN --如果父节点等于-1,就表示已经查找到根节点,再也没有数据查找了,也就是说最终没找到,所以将返回值设成0
 39    SET @Ret = 0
 40    END
 41    ELSE
 42    BEGIN --如果父节点也不等于-1,表示当前没有找到根节点,还要继续查找父节点的父节点,所以将@P的值赋给@TypeID来继续查找
 43                SET @Menuid = @P
 44            END
 45        END
 46    END
 47    RETURN @Ret
 48END 
 49
 503:在web.config配置文件中写:
 51 </connectionStrings>
 52 <appSettings>
 53        <add key="conStr" value="server=192.200.188.208;uid=sa;pwd=;database=数据库名字"/>
 54    </appSettings>
 55
 564:在创建一个SqlHelper类做超作数据库的
 57using System;
 58using System.Data.SqlClient;
 59using System.Data;
 60using System.Collections;
 61using System.Configuration.Assemblies;
 62using System.Configuration;
 63namespace SqlData
 64{
 65    public class SqlHelper
 66    {
 67        /// <summary>
 68        ///通过连接数据库的方法ConfigurationSettings.AppSettings()获取字符传为的键:conStr
 69        /// </summary>

 70        public  static readonly string ConStr = ConfigurationSettings.AppSettings["conStr"].ToString();
 71        public static void FillDataTable(string sql, DataTable dt, params  SqlParameter[] param)
 72        {
 73            SqlConnection con = new SqlConnection(ConStr);
 74            if (con.State == ConnectionState.Closed)
 75            {
 76                con.Open();
 77            }

 78            SqlDataAdapter ada = new SqlDataAdapter(sql, con);
 79            foreach (SqlParameter p in param)
 80                ada.SelectCommand.Parameters.Add(p);
 81            ada.Fill(dt);
 82            if (con.State == ConnectionState.Open)
 83            {
 84                con.Close();
 85                con.Dispose();
 86            }

 87          }

 88     }

 89}

 90
 91
 923:在再另一个ConMenuSql类中写SQL语句
 93 /// <summary>
 94 /// 导航采单
 95 /// </summary>

 96public const string SELECT_MENU_NAVIGATION_MENUS = "SELECT M.* FROM  BASE_MENU AS M INNER JOIN BASE_MENU AS P ON  DBO.[ISMENUPARENT](M.MENUID,P.MENUID) =1 OR M.MENUID=@0 WHERE P.MENUID=@1 AND P.NAME=@2";
 97
 98
 994:创建一个SelectHouseInfo类写如下方法:
100using System;
101using System.Data;
102using System.Configuration;
103using System.Web;
104using System.Web.Security;
105using System.Web.UI;
106using System.Web.UI.WebControls;
107using System.Web.UI.WebControls.WebParts;
108using System.Web.UI.HtmlControls;
109using System.Drawing;
110
111/// <summary>
112/// SelectHouseInfo 的摘要说明
113/// </summary>

114public class SelectHouseInfo
115{
116  public SelectHouseInfo()
117    {
118
119    }

120
121    /// <summary>
122    ///定义方法做导航
123    /// 有多少级就展开多少级
124    /// </summary>
125    /// <param name="typeid"></param>
126    /// <param name="typesname"></param>

127    public void BuildNavigationMenu(Menu menuname, int Navigationselfid, int Navigationid, string NavigationName)
128    {
129
130        DataTable Menudt = GetSelectAllNavigationMenus(Navigationselfid, Navigationid, NavigationName);
131        MenuItem lii;
132        for (int i = 0; i < Menudt.Rows.Count; i++)
133        {
134            lii = new MenuItem();
135            lii.Text = Menudt.Rows[i]["Name"].ToString();
136            //  lii.NavigateUrl = Menudt.Rows[i]["URL"].ToString();
137            lii.Value = Menudt.Rows[i]["menuid"].ToString();
138            MenuItem items = new MenuItem();
139            items.ImageUrl = "~/images/move_right.gif";
140            items.Selectable = false//设置一个值不能单机该项
141            menuname.Items.Add(items);
142            items.ChildItems.Remove(items);
143            menuname.Items.Add(lii);
144            lii.Selectable = false;
145        }

146    }

147
148      /// <summary>
149       /// 导航菜单
150       /// </summary>
151       /// <param name="Navigationid"></param>
152       /// <param name="NavigationName"></param>
153       /// <returns></returns>

154
155       public DataTable GetSelectAllNavigationMenus(int NavigationSelfid, int Navigationid, string NavigationName)
156       {
157           DataTable dt = new DataTable();
158           SqlHelper.FillDataTable(ConMenuSql.SELECT_MENU_NAVIGATION_MENUS, dt, new SqlParameter("@0", NavigationSelfid),
159               new SqlParameter("@1", Navigationid),
160               new SqlParameter("@2", NavigationName));
161           return dt;
162       }

163}

164
1655:直接在界面上拖一个Menu控件
166然后在界面类里load事件里写如下代码:
167   protected void Page_Load(object sender, EventArgs e)
168    {
169        if (!this.IsPostBack)
170        {
171  int navigationid = Convert.ToInt32(Request["menuid"].ToString()); //传过来的页面ID也就是在数据库中出现的ID
172                string navigationname = Server.HtmlDecode(Request["MenuName"].ToString());///传过来的页面名字
173                selecthouseinfo.BuildNavigationMenu(Menu1,navigationid, navigationid, navigationname); ///调用SelectHouseInfo类中的BuildNavigationMenu这个方法进行传参数
174}

175}

176