zoukankan      html  css  js  c++  java
  • c#两级菜单menu的动态实现

    之前,上年了,我写过一个系统,测试用的,感觉做动态menu时候很别扭,难实现,扩展也不好,关键有两点:

    1、数据库(表)的设计没有设计好

    2、程序实现起来不够灵活,导致扩展也难。

    于是,我4月决定一定要解决该问题,重写了该模块。

    终于实现如下,还很简单哦。

    1、在页面上拖一个Menu控件,等待动态调用。  

    2、数据库对应的mssql表:注意id列要标识:是 标识种子:1  标识增量:1才会自动递增的哦。

    看图表示:

    3、代码实现,很简单哦

    protected void Page_Load(object sender, EventArgs e)
        {

    if (!IsPostBack)
            {
                SqlConnection conn = db.Acce_Conn();
                conn.Open();
               string sql = "select * from site_inf";
                SqlCommand cmd = new SqlCommand(sql, conn);//定义为可执行命令的对象
                SqlDataReader reader = cmd.ExecuteReader();
                if (reader.Read ())//可以忽略红色
                {
                    site_name = reader["site_name"].ToString();//获得站点原来设置好的信息site_inf为站点设置信息表
                    site_logo = reader["site_logo"].ToString();
                    site_picture = reader["site_picture"].ToString();
                    school_pic_type = site_picture.Substring(site_picture.LastIndexOf(".") + 1);//获得图片类型是jpg or swf
                }
                reader.Close();
                 conn.Close();

          
                MenuItem[] mi = new MenuItem[10];//一级菜单
                MenuItem[] mi_child = new MenuItem[30];
                DataTable get_site_inf = db.accessGetDataSet("select * from top_menu where class_id=0").Tables[0];//得到表的一级菜单数据集
                DataTable get_site_inf_child = db.accessGetDataSet("select * from top_menu where class_id=1").Tables[0];//得到表的二级菜单数据集
                for (int i = 0; i <= get_site_inf.Rows .Count-1 ; i++)//循环表得到菜单
                {
                    mi[i] = new MenuItem();
                    mi[i].Text = get_site_inf.Rows[i]["menu_name"].ToString();//得到一级菜单
                    Menu1.Items.Add(mi[i]);
                    mi[i].NavigateUrl = get_site_inf.Rows [i]["menu_link"].ToString();             

                }
                for (int j = 0; j <= get_site_inf_child.Rows.Count - 1; j++)//得到二级菜单
                {
                    mi_child[j] = new MenuItem();
                    if (get_site_inf_child.Rows[j]["menu_name"].ToString() != "")//如果数据库中不为空值,则...
                    {
                        mi_child[j].Text = get_site_inf_child.Rows[j]["menu_name"].ToString();//表中的第二行开始,得到二级以下
                        int i = System.Convert.ToInt32(get_site_inf_child.Rows[j]["father_id"].ToString());
                        mi[i - 1].ChildItems.Add(mi_child[j]);//为什么要i-1, 因为father_id对应的id要一致,表是从0开始计算的,所以,i-1才对应真实表的第一行
                      if (get_site_inf_child.Rows[j]["menu_link"].ToString()!="") 
                     {
                         mi_child[j].NavigateUrl = get_site_inf_child.Rows[j]["menu_link"].ToString();
                     }
                     else
                    {
                       mi_child[j].NavigateUrl = "news_list.aspx?inf_type=" + mi_child[j].Text;//如果没有链接,则导航到指定页面
                    }
                   }
                }

     4、经过测试,调试,是没有问题的。看效果,还可以链接好的哦。不过,在录入页面,要设置好,到底是一级菜单还是二级别菜单,导航到那里才行。看效果

    5、说明:db是一个写好的类,里面有不少函数和通用的可调用的方法。

    好好想想。好好想想,三级菜单是否也可以这样实现呢?呵呵!!!!!!!!!!!!

    6.如果想manu菜单不出现小箭头,可以

    staticEnableDefaultPopImageOut属性设置为False,就可以解决了.

  • 相关阅读:
    1021. Deepest Root (25)
    1013. Battle Over Cities (25)
    h5ai目录列表优化
    利用chrome调试手机网页
    跨域相关配置
    HttpClient服务端发送http请求
    滚动条样式优化(CSS3自定义滚动条样式 -webkit-scrollbar)
    javaScript复制粘贴
    效率工作
    spring boot实现文件上传下载
  • 原文地址:https://www.cnblogs.com/pyman/p/2009121.html
Copyright © 2011-2022 走看看