asp.net+数据库生成弹出菜单

自己写的一个菜单共用类,现成源码贴出来,关联数据库。可在多个系统中通过派生的方式调用此类。最大的优点,写好这一个类,即可以在多子系统中终于用此类实现所有子系统的菜单生成。  
  一、数据结构(SQL   SERVER   2000)  
  1、主菜单(menu_big)  
  id                             bigint       8       自动编号  
  module_id               bigint       8       子系统名称  
  big_class_name     varchar     20     主菜单名称  
  2、子菜单(menu_small)  
  id                                 bigint         8         自动编号  
  big_class_id             bigint         8         主菜单编号  
  small_class_name     varchar       20       子菜单名称  
  small_class_link     varchar       100     子菜单链接  
  二、源码(见下贴)  
  三、使用方法  
  1、首先新建一个文件ASPX文件,将源码部分更新到cs文件里。  
  2、在使用MENU的文件里修改public   class   Win_MyWeb   :   System.Web.UI.Page为public   class   Win_MyWeb   :   在里建的文件名,不含扩展名(便My_Web)  
  3、调用菜单类this.this.ModuleTextMenu(子系统ID,菜单上边距,菜单左边距)  
  四、说明  
  1、如有不明白请联系QQ3818755(申请时请写明来自CSDN)   E-MAIL:zcj78@163.com

using   System;  
  using   System.Collections;  
  using   System.ComponentModel;  
  using   System.Data;  
  using   System.Data.SqlClient;  
  using   System.Drawing;  
  using   System.Web;  
  using   System.Web.SessionState;  
  using   System.Web.UI;  
  using   System.Web.UI.WebControls;  
  using   System.Web.UI.HtmlControls;  
  using   System.IO;  
  using   System.Text;  
   
  namespace   catv  
  {  
  ///   <summary>  
  ///   Win_MyWeb   的摘要说明。  
  ///   </summary>  
  public   class   Win_MyWeb   :   System.Web.UI.Page  
  {  
  public   SqlConnection   MyConn;  
  public   SqlDataAdapter   MyDataAdapter;  
  public   DataSet   MyDataSet;  
  public   SqlCommand   MyCMD;  
  public   SqlDataReader   MyDataReader;  
  public   string   m_Str_Counter;  
   
  private   void   Page_Load(object   sender,   System.EventArgs   e)  
  {  
  //   在此处放置用户代码以初始化页面  
  }  
                 
   
        //打开数据库联接并创建一个SqlCommand,同时激活事务  
  public   bool   MyConnectionOpen()  
  {  
  //功能说明:联接数据库  
  //与数据连接相关的参数存放在   web.config   文件中  
  m_Str_Counter   =   System.Configuration.ConfigurationSettings.AppSettings["MyCounter"];  
  this.MyConn   =   new   SqlConnection(m_Str_Counter);  
  try  
  {  
  this.MyConn.Open();  
  this._ErrMsg="";  
  }  
  catch(Exception   err)  
  {  
  this._ErrMsg=err.ToString();  
  return   false;  
  }  
  return   true;  
  }  
   
                //关闭数据库联接  
  public   void   MyConnectionClose()  
  {  
  //功能说明:关闭数据库联接  
  this.MyConn.Close();  
  }  
   
              //创建DateSet并加入一个数据表  
  public   bool   MyDataSetFill(string   Str_SQL,string   Str_TableName)  
  {  
  //功能说明:创建DateSet并加入一个数据表  
  //变量说明:  
  //                     Str_SQL                   函数接受的Select语句  
  //                     Str_TableName       DateSet中加入数据表的别名  
  if(this.MyConnectionOpen())  
  {  
  this.MyDataAdapter   =   new   SqlDataAdapter(Str_SQL,this.MyConn);  
  this.MyDataSet   =   new   DataSet();  
  try  
  {  
  this.MyDataAdapter.Fill(this.MyDataSet,Str_TableName);  
  this.MyConnectionClose();  
  }  
  catch(Exception   e)  
  {  
  this.ErrorMsg(e.ToString());  
  this.MyConnectionClose();  
  return   false;  
  }  
  return   true;  
  }  
  else  
  {  
  return   false;  
  }  
  }  
   
                 
  //往DateSet中追加数据表  
  public   bool   MyDataSetFillAdd(string   Str_SQL,string   Str_TableName)  
  {  
  //功能说明:往DateSet中追加数据表  
  //变量说明:  
  //                     Str_SQL                   函数接受的Select语句  
  //                     Str_TableName       DateSet中加入数据表的别名  
  if(this.MyConnectionOpen())  
  {  
  this.MyDataAdapter   =   new   SqlDataAdapter(Str_SQL,this.MyConn);  
  try  
  {  
  this.MyDataAdapter.Fill(this.MyDataSet,Str_TableName);  
  this.MyConnectionClose();  
  }  
  catch(Exception   e)  
  {  
  this.ErrorMsg(e.ToString());  
  this.MyConnectionClose();  
  return   false;  
  }  
  return   true;  
  }  
  else  
  {  
  return   false;  
  }  
  }  
   
                //从DateSet中清除数据表  
  public   void   MyDatasetFillDel(string   Str_TableName)  
  {  
  //功能说明:从DateSet中清除数据表  
  //变量说明:  
  //                     Str_TableName       DateSet中加入数据表的别名  
  this.MyDataSet.Tables[Str_TableName].Clear();  
  }  
   
  //获取子系统文本菜单  
  public   void   ModuleTextMenu(int   Int_ModuleId,int   Int_Top,int   Int_Left)  
  {  
  //功能说明:获取子系统快捷工具栏  
  //变量说明:  
  //                     Int_ModuleId           子系统ID  
  //                     Int_Top                     文本菜单上边距  
  //                     Int_Top                     文本菜单左边距  
  int   divleft   =   0;  
  string   onmousemovemsg   =   "";  
  string   TextMenuMSG   =   "<table   border=0   width=788   style='position:   absolute;   left:   "+Int_Left+"px;   top:   "+Int_Top+"px;   border:   1   outset   #FFFFFF'   bgcolor='#D4D0C8'   cellspacing=0   cellpadding=0   height=27><tr><td   width='100%'   valign='middle'>";  
  string   str_Sql="select   *   from   menu_big   where   module_id="+Int_ModuleId+"";  
  if(this.MyDataSetFill(str_Sql,"menu_big"))  
  {  
  for   (int   i=0;i<this.MyDataSet.Tables["menu_big"].Rows.Count;i++)  
  {  
  string   onmouseovermsg   =   "movemenu('"+"small"+i.ToString().Trim()+"');";  
  string   onmousedownmsg   =   "clickmenu('"+"small"+i.ToString().Trim()+"');";  
  for(   int   k=0;k<this.MyDataSet.Tables["menu_big"].Rows.Count;k++)  
  {  
  if   (i!=k)  
  {  
  onmouseovermsg   =   onmouseovermsg   +   "clickmenuclose('"+"small"+k.ToString().Trim()+"');";  
  onmousedownmsg   =   onmousedownmsg   +   "clickmenuclose('"+"small"+k.ToString().Trim()+"');";  
  }  
  }  
  TextMenuMSG   =   TextMenuMSG+"<div   style=\"z-index:   1;   visibility:   visible;\"   onmouseover=\""+onmouseovermsg+"\"   onmousedown=\""+onmousedownmsg+"\"><table   height=24   cellspacing=0   cellpadding=0   style=\"float:   left\"><tr><td   align=center   valign=middle>&nbsp;&nbsp;"+this.MyDataSet.Tables["menu_big"].Rows[i]["big_class_name"].ToString().Trim()+"&nbsp;&nbsp;&nbsp;</td></tr></table></div>";  
  TextMenuMSG   =   TextMenuMSG+"<div   id=\""+"small"+i.ToString().Trim()+"\"   style=\"z-index:   "+120+";   visibility:   hidden;\"><table   cellspacing=0   cellpadding=0   style=\"Z-INDEX:   103;   LEFT:   "+divleft+"px;   POSITION:   absolute;   TOP:   26px;   float:   left;   border:   1   outset   #D4D0C8\"   bgcolor=\"#D4D0C8\">";  
  divleft   =   divleft+this.MyDataSet.Tables["menu_big"].Rows[i]["big_class_name"].ToString().Trim().Length*13+16;  
  str_Sql="select   *   from   menu_small   where   big_class_id="+this.MyDataSet.Tables["menu_big"].Rows[i]["id"].ToString().Trim()+"   order   by   id";  
  if(this.MyDataSetFillAdd(str_Sql,"menu_small"))  
  {  
  if   (this.MyDataSet.Tables["menu_small"].Rows.Count!=0)  
  {  
  onmousemovemsg   =   onmousemovemsg+"document.all[\""+"small"+i.ToString().Trim()+"\"].style.visibility   ==   'visible'";  
  if   (i<this.MyDataSet.Tables["menu_big"].Rows.Count-1)  
  {  
  onmousemovemsg   =   onmousemovemsg   +   "   ||   ";  
  }  
  for   (int   j=0;j<this.MyDataSet.Tables["menu_small"].Rows.Count;j++)  
  {  
  if(this.MyDataSet.Tables["menu_small"].Rows[j]["small_class_name"].ToString().Trim()=="分隔线")  
  {  
  TextMenuMSG   =   TextMenuMSG+"<tr><td   valign=middle   height=10><hr   width=\"86%\"   align=center></td></tr>";  
  }  
  else  
  {  
  TextMenuMSG   =   TextMenuMSG+"<tr><td   valign=middle   height=26>&nbsp;&nbsp;&nbsp;&nbsp;<a   href=\""+this.MyDataSet.Tables["menu_small"].Rows[j]["small_class_link"].ToString().Trim()+"\"   onclick=\"clickmenuclose('"+"small"+i.ToString().Trim()+"');\"   target=main>"+this.MyDataSet.Tables["menu_small"].Rows[j]["small_class_name"].ToString().Trim()+"</a>&nbsp;&nbsp;&nbsp;&nbsp;</td></tr>";  
  }  
  }  
  }  
  this.MyDatasetFillDel("menu_small");  
  }  
  else  
  {  
  this.MyConnectionClose();  
  this.MessgeBox("读取子菜单数据表错误!");  
  }  
  TextMenuMSG   =   TextMenuMSG+"</table></div>";  
  }  
  this.MyDatasetFillDel("menu_big");  
  }  
  else  
  {  
  this.MyConnectionClose();  
  this.MessgeBox("读取主菜单数据表错误!");  
  }  
  TextMenuMSG   =   TextMenuMSG+"</td></tr></table>";  
  if(onmousemovemsg=="")  
  {  
  onmousemovemsg="1==1";  
  }  
  TextMenuMSG   =   TextMenuMSG+"<script   language=JavaScript>function   clickmenuclose(menuid){eval(\"document.all['\"+menuid+\"'].style.visibility='hidden'\")}function   clickmenu(menuid){if(document.all[\"\"+menuid+\"\"].style.visibility   ==   'visible'){eval(\"document.all['\"+menuid+\"'].style.visibility='hidden'\")}else{eval(\"document.all['\"+menuid+\"'].style.visibility='visible'\")}}function   movemenu(menuid){if("+onmousemovemsg+"){eval(\"document.all['\"+menuid+\"'].style.visibility='visible'\")}}</script>";  
  this.Response.Write(TextMenuMSG);  
  }  

补充说明:  
  类public   bool   MyConnectionOpen()里两个this._ErrMsg=可以删除(没用)。  
  缺少一个弹出消息的类(其实就是javascript的alert)  
  public   void   MessgeBox(string   msg)  
  {  
  //功能说明:弹出一个消息框  
  //变量说明:  
  //                     msg       接受的提示信息  
  this.RegisterStartupScript("suggestion","<script   language=javascript>alert('"+msg+"');</script>");  
  }  


posted @ 2006-06-13 20:30  しovのんeТs  阅读(808)  评论(0编辑  收藏  举报