آموزش ساخت منو و زیرمنو توسط جداول بانک اطلاعاتی

منو و زیرمنوها قسمت مهمی از هر برنامه می باشد. راه های زیادی برای ساخت آنها در برنامه وجود دارد. همچنین ما برای دسترسی آسان به هر صفحه از طریق منو و زیر منو از مسیر ناوبری استفاده می کنیم.

آموزش ساخت منو و زیرمنو توسط جداول بانک اطلاعاتی

 منو و زیر منوها به طور معمول با hyperlink و یا link button ساخته می شوند. با این حال ما در این مقاله نحوه ساخت منو و زیرمنو توسط جداول بانک اطلاعاتی نمایش می دهیم.

ابتدا یک بانک اطلاعاتی با نام MenuSubmenuDB ساخته و یک جدول در آن با نام MenuSubmenu ایجاد نمایید.

    create table MenuSubmenu  
    (  
    Menu_id int identity(1,1) primary key,  
    Submenu_id int,  
    Menu varchar(30),  
    MenuUrl nvarchar(500)  
    )

سپس یک procedure با کد زیر بسازید.

Create procedure sp_Menu  
@Submenu_id int  
as  
begin  
select Menu_id,Submenu_id,Menu,MenuUrl from MenuSubmenu where Submenu_id=@Submenu_id  
End

رکوردهای منو و زیرمنو را مانند شکل زیر درون جدول درج می نماییم.

شما در این جدول فیلدهای table Menu_id ، submenu_id ، Menu name ، Menu URL را می بینید. در پایین صفحه 1 و صفحه 2 ، زیر صفحه 1 و زیر صفحه 2 که صفحه های فرزند هستند وجود دارند.

کسانی که وقت کافی برای ساخت بانک و جداول ندارند می توانند فایل نصبی موجود در پوشه ضمیمه را نصب کنند سپس از این قسمت شروع به ساخت پروژه نمایند.

 

یک پروژه ایجاد کرده و یک فرم با نام webform1 به آن اضافه نمایید.

کدهای زیر را در صفحه webform1.aspx کپی نمایید.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="MenuSubmenuEX.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
       <a href="http://www.barnamenevisan.org"> <h1>مرجع تخصصی برنامه نویسان</h1></a>
        <h1>نمونه منو و زیرمنو</h1>  
    <asp:Menu ID="HMenu" runat="server" Orientation="Horizontal" >  
        <StaticSelectedStyle />  
        <LevelMenuItemStyles>  
            <asp:MenuItemStyle />  
        </LevelMenuItemStyles>  
    </asp:Menu> 
    </div>
    </form>
</body>
</html>

پس از تنظیم کردن رشته اتصال مانند زیر :

  <connectionStrings>
    <add name="connstr" connectionString="Data Source=.;Initial Catalog=نام بانک اطلاعاتی;User ID=نام کاربری کامپیوتر;Password=رمزعبور"
      providerName="System.Data.SqlClient" />
  </connectionStrings>

حال کدهای زیر را در صفحه webform1.aspx.cs کپی نمایید.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.IO;
namespace MenuSubmenuEX
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        string constr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                DataTable dt = GetMenu(0);
                FillMenu(dt, 0, null);
            }
        }
        private DataTable GetMenu(int Submenu_id)
        {
            using (SqlConnection con = new SqlConnection(constr))
            {
                using (SqlCommand cmd = new SqlCommand("sp_Menu", con))
                {
                    SqlDataAdapter sd = new SqlDataAdapter();
                    DataTable dtMenu = new DataTable();

                    cmd.Parameters.AddWithValue("@Submenu_id", Submenu_id);
                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Connection = con;
                    sd.SelectCommand = cmd;
                    sd.Fill(dtMenu);
                    return dtMenu;
                }
            }
        }
        private void FillMenu(DataTable dt, int Submenu_id, MenuItem MenuItem)
        {
            string Page = Path.GetFileName(Request.Url.AbsolutePath);
            foreach (DataRow row in dt.Rows)
            {
                MenuItem Menu = new MenuItem
                {
                    Value = row["Menu_id"].ToString(),
                    Text = row["Menu"].ToString(),
                    NavigateUrl = row["MenuUrl"].ToString(),
                    Selected = row["MenuUrl"].ToString().EndsWith(Page, StringComparison.CurrentCultureIgnoreCase)
                };
                if (Submenu_id == 0)
                {
                    HMenu.Items.Add(Menu);
                    DataTable dtSubmenu = this.GetMenu(int.Parse(Menu.Value));
                    FillMenu(dtSubmenu, int.Parse(Menu.Value), Menu);
                }
                else
                {
                    MenuItem.ChildItems.Add(Menu);
                }
            }
        }
    }
}


 

فایل های ضمیمه