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> "+this.MyDataSet.Tables["menu_big"].Rows[i]["big_class_name"].ToString().Trim()+" </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> <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> </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>");
}
一、数据结构(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> "+this.MyDataSet.Tables["menu_big"].Rows[i]["big_class_name"].ToString().Trim()+" </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> <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> </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>");
}