CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

求动态生成菜单的代码

楼主skykevin(蓝屿)2003-09-02 08:43:39 在 .NET技术 / C# 提问

在如下示意的一种可能结构中:  
      m0                     m1                     m2  
        m01                                           m20  
        m02                                           m21------m210  
        m03                                           m22             m211  
      ...                                             ...             m212  
  ......  
   
        菜单层次事先不确定,有可能只有一级菜单,有可能有二级,也可能有三级,甚至更多,反正不能有限制,菜单项存在库表中,并为自连接,如下:  
          menuitem         menuitem_parent  
            m01                             m0  
            m20                             m2  
  .......  
   
  在此前提下,求一次生成菜单的方法及代码。  
   
  email:   tyldl@sina.com  
  问题点数:100、回复次数:6Top

1 楼zhouzhouzhou(人生程序)回复于 2003-09-02 08:49:13 得分 60

本代碼是根據用戶的權限來動態生成的。  
  public   class   MenuEvent  
  {  
  private   static   string   _flag="";  
  private   static   Form   _mdi=null;  
   
  public   static   string   flag  
  {  
  get   {return   _flag;}  
  set   {_flag   =   value;}  
  }  
   
  public   static   Form   mdi  
  {  
  get   {return   _mdi;}  
  set   {_mdi   =   value;}  
  }  
   
  public   MenuEvent()  
  {  
  //  
  //   TODO:   Add   constructor   logic   here  
  //  
  }  
   
  //創建第一級菜單  
  public   static   void   MakeMenuItem(ref   System.Windows.Forms.MainMenu   MainMenu,string   strUserName,string   strDeptNo)  
  {  
  flag   =   "";  
  MainMenu.MenuItems.Clear();  
  MenuItem   m   =   new   MenuItem();  
  string   strSQL   =   "SELECT   distinct   y.mkbm,y.mkmc,y.sjmkbm,y.sfzjd   FROM   "  
  + "(select   a.js,b.mkbm   from   b_czryjs   a   inner   join   b_qxqd   b   on   a.js=b.js   "  
  +       "where   a.yhm='"+strUserName+"'   and   a.bmbh='"+strDeptNo+"')x,b_mkqd   y   "  
  + "where   x.mkbm=y.mkbm   order   by   y.mkbm";  
   
  SqlDataAdapter   da   =   new   SqlDataAdapter(strSQL,DB.SQLServer.GetConnection());  
  DataTable   MenuTemp   =   new   DataTable();  
  da.Fill(MenuTemp);  
  da.Dispose();  
   
  //生成總結點  
  DataRow[]   rows   =   MenuTemp.Select("sjmkbm   =   "   +   0);  
  if   (rows.Length   >   0)  
  {  
  GenMenu(ref   MainMenu,ref   MenuTemp,rows[0][1].ToString(),m,(int)rows[0][0],(bool)rows[0][3]);  
  }  
  else  
  {  
  MessageBox.Show("請與系統管理員聯繫,您當前的系統權限存在問題!","系統提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);  
  return;  
  }  
   
  MenuTemp.Dispose();  
  rows   =   null;  
  }  
  //遞歸方法創建相對應下級菜單  
  public   static   void   GenMenu(ref   System.Windows.Forms.MainMenu   MainMenu,ref   DataTable   temp,string   Mkmc,MenuItem   m0,int   iniMkbm,bool   leaf)  
  {  
  MenuItem   m=new   MenuItem();  
  m.Text=Mkmc;  
  if   (iniMkbm.ToString().Length==4)  
  {  
  MainMenu.MenuItems.Add(m);  
  }  
  else  
  {  
  m0.MenuItems.Add(m);  
  if   (leaf)  
  {  
  m.Click+=new   EventHandler(event_Handler);  
  }  
  }  
   
  DataRow[]   rows   =   temp.Select("sjmkbm   =   "   +   iniMkbm);  
  if   (rows.Length   >0)  
  {  
  for(int   i   =   0;i   <   rows.Length;i++)  
  {  
  GenMenu(ref   MainMenu,ref   temp,rows[i][1].ToString(),m,(int)rows[i][0],(bool)rows[i][3]);  
  }  
  }  
  }  
  }Top

2 楼zhbname(赤澜)回复于 2003-09-02 08:53:44 得分 40

你可以将菜单当成树来对待.如我新增一个菜单项,我就得到一个M1.新增子项  
  就得到M10.在数据方面有两种方式确定:一种方式通过建立数据表,通过递归  
  的方式读出这张表.另一种通过建立XML数据来关联.具体的代码,你要自已动手.Top

3 楼zhouzhouzhou(人生程序)回复于 2003-09-02 08:56:22 得分 0

我的代碼就是實際運用成功的。Top

4 楼skykevin(蓝屿)回复于 2003-09-02 09:37:31 得分 0

楼上zhouzhouzhou:  
          感谢及时相助。初读代码,有点疑惑:关于递归调用中的“DataRow[]   rows   =   temp.Select("sjmkbm   =   "   +   iniMkbm)”,如果树的某一支,达到叶节点(如rows==null),将结束菜单构造,不能遍历整个菜单树,只能是其中一支。望给予明示。  
  Top

5 楼zhouzhouzhou(人生程序)回复于 2003-09-02 10:57:29 得分 0

先是構造第一級的全部菜單  
   
  然后在循環。  
   
  Top

6 楼skykevin(蓝屿)回复于 2003-09-02 11:29:37 得分 0

楼上zhouzhouzhou:  
        如果第二级菜单有m00、m01两项,m00又有m000、m001、m002三项,这时递归调用,经由m00->m000后就会结束递归。遍历不到m01、   m001、   m002。  
  Top

相关问题

  • 菜单动态生成
  • 动态生成菜单
  • 求救:使用菜单项目的ADD方法动态生成菜单后如何编写响应代码??
  • 老掉牙的问题了,谁有动态生成树状菜单的源代码
  • delphi如何动态生成菜单?(Ailler)
  • 用api生成动态菜单问题
  • 如何动态生成菜单?
  • xml文件动态生成菜单。
  • 求教VB动态菜单的生成
  • 如何动态生成菜单项?

关键词

  • js
  • mkbm
  • menutemp
  • 生成
  • 菜单
  • mainmenu
  • menuitem
  • mdi
  • flag
  • da

得分解答快速导航

  • 帖主:skykevin
  • zhouzhouzhou
  • zhbname

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo