关于C#制作网页项目,利用数据库生成动态下拉菜单的问题 本帖最后由 wwle 于 2012-11-20 17:39:33 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可能没有很明白楼主的想法 其实在Asp.Net里面 比如你需要一个下拉菜单或者导航 是不需要自己去动手也一个页面或者别的什么 因为已经做成控件的方式 方便开发人员使用 只要向你的页面中拖放 然后编辑需要的代码就可以了 根据楼主的问题 写了如下例子 希望对楼主有所帮助Default.aspx<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div> <%--这里需要添加一个下拉菜单的控件--%> <asp:DropDownList ID="ddlTest" runat="server"> </asp:DropDownList> <%-- 这是生成页面的源码 <select name="ddlTest" id="ddlTest"> <option value="0">选择项一</option> <option value="1">选择项二</option> <option value="2">选择项三</option> --%> </div> </form></body></html>Default.aspx.cs(也就是所说的后台代码)using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { //判断是否是第一次请求页面 if (!IsPostBack) { BindDate(); } } //绑定数据 void BindDate() { //初始化测试数据 //当然 这里的数据一般来说都是从数据库读取 然后通过封装后获取的 List<Selection> list = new List<Selection>(); list.Add(new Selection("选择项一", 0)); list.Add(new Selection("选择项二", 1)); list.Add(new Selection("选择项三", 2)); //设置下拉菜单的数据源 this.ddlTest.DataSource = list; //设置下拉菜单的显示内容的数据源字段 this.ddlTest.DataTextField = "Name"; //设置下拉菜单的值的数据源字段 this.ddlTest.DataValueField = "Value"; //绑定数据源 this.ddlTest.DataBind(); } /// <summary> /// 选择项类 /// </summary> public class Selection { //显示的选项名称 public string Name { get; set; } //选项值 public int Value { get; set; } //默认构造 public Selection() { } //扩展构造 public Selection(string name, int value) { this.Name = name; this.Value = value; } }} 形如http://users.tpg.com.au/j_birch/plugins/superfish/#Example 下面那种样子的吗?例子是静态的,要动态的也简单。把你的的树形栏目 数据后台构成成 <ul>... <li>...并按照Example 的CSS样式谁定好,形成完整的字符串,传递到你的前台控件, 使用jquery 调用例子中的函数就行了。另外一做法,相对简单,使用 asp.net 原生组件 Menu,例子网上一堆~ 使用控件 <asp:DropDownList ID="ddlTest" runat="server"> </asp:DropDownList>在后台代码 page_Load()中,使用ADO 进行数据库查询 ,设置控件数据源如 ddlTest.DataSource= 你的数据表(DataTable) ,设置显示名称和值 ddlTest.DataTextField = "Name"; //设置下拉菜单的值的数据源字段 ddlTest.DataValueField = "Value"; 忘记贴地址了,使用控件 <asp:DropDownList ID="ddlTest" runat="server"> </asp:DropDownList>绑定DataSet string sql = "select * from T_labelinfo"; //查询数据库中要绑定的数据 DataSet ds = this.DataManager.Fill(sql);//这个是一个查询方法,你不用管 if (ds.Tables.Count > 0)//判断你是否查询到数据 { ddlTest.DataSource = ds;//下拉控件绑定数据源 ddlTest.DataValueField = "labelID";//下拉控件的值是lableID这个字段的值 ddlTest.DataTextField = "constructionname";//下拉控件的文本是这个字段的值 ddlTest.DataBind();//绑定 }这就OK了。不知道是不是你想要的。 感谢回答但是我说的下拉菜单 不是 select 我说的网站的主导航栏目,具有二级菜单.主页|产品|招聘|联系我们 产品有二级菜单.菜单表的结枸如下menuid,menupid,menucaption,menutitle ,menudetail 但是我说的下拉菜单 不是 select 我说的网站的主导航栏目,具有二级菜单.主页|产品|招聘|联系我们 产品有二级菜单.菜单表的结枸如下menuid,menupid,menucaption,menutitle ,menudetail 但是我说的下拉菜单 不是 select 我说的网站的主导航栏目,具有二级菜单.主页|产品|招聘|联系我们 产品有二级菜单.菜单表的结枸如下menuid,menupid,menucaption,menutitle ,menudetail 哦,,你是做菜单哦你去这个地址看看。。http://blog.csdn.net/zhuyu19911016520/article/details/8194386 明白楼主的意思了 实验结果如下 希望对楼主有帮助 先看下效果Default.aspx<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"> <title></title></head><body> <form id="form1" runat="server"> <div> <%-- 页面添加一个菜单控件 --%> <asp:Menu ID="Menu1" runat="server" Orientation="Horizontal"> </asp:Menu> </div> </form></body></html>Default.aspx.cs(注释可能不够详细 如果楼主不明白意思可以在其中任一处加断点后调试 观察变量值 这样会有助于理解)using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using TestDAL;using System.Data;public partial class _Default : System.Web.UI.Page{ protected void Page_Load(object sender, EventArgs e) { //判断是否是第一次请求页面 if (!IsPostBack) { BindMenu(Menu1, null, "0"); } } /// <summary> /// 绑定菜单(递归方法) /// </summary> /// <param name="mn">要绑定的菜单</param> /// <param name="menu">菜单项</param> /// <param name="mainMenu">菜单层级</param> static void BindMenu(Menu mn , MenuItem menu , string mainMenu) { MenuItem mitem = null; //获取所有的菜单列表 DataSet ds = TestService.GetMenus(); DataTable dt = ds.Tables[0]; //筛选 父级菜单为指定菜单级别的集合 DataRow[] drows = dt.Select("MenuPid='" + mainMenu + "'"); foreach (DataRow dr in drows) { mitem = new MenuItem(); mitem.Text = dr["MenuName"].ToString(); mitem.Value = dr["MenuId"].ToString(); //当菜单项为空时 表示为顶级菜单 if (menu == null) { //故添加至菜单 mn.Items.Add(mitem); } else //若不是 则为子菜单项 { //添加至上级菜单的子项集合中 menu.ChildItems.Add(mitem); } //筛选 父级菜单为当前菜单项时 DataRow[] drs = dt.Select("MenuPid='" + mitem.Value + "'"); mainMenu = mitem.Value; BindMenu(mn, mitem, mainMenu); } }}数据访问层数据库中的数据using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.SqlClient;using System.Data;namespace TestDAL{ /// <summary> /// Author:Echo /// Time:2012/11/22 22:53:08 /// CLRVersion:4.0.30319.296 /// GUID:6f05e5cc-99ff-4dcc-907a-ca39815fc7dc /// </summary> public class TestService { /// <summary> /// 获取所有的菜单项 /// </summary> /// 表结构 /// --------------------- /// MenuId Int /// MenuName Nvarchar(50) /// MenuPid Int /// --------------------- /// <returns></returns> public static DataSet GetMenus() { DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(); using (SqlConnection con = DBHelper.Connection) { string sql = "SELECT * FROM Test"; SqlCommand cmd = new SqlCommand(sql, con); da.SelectCommand = cmd; try { da.Fill(ds, "menus"); return ds; } catch (Exception ex) { throw ex; } } } }} 还有个问题 如果类似很酷的下拉菜单(栏目菜单导航) ,那又有什么好的办法呢。估计这个 menu 的样式是固定的,对不?能不能 整点想 模板王 那里的jquery 那么酷酷的菜单效果?我xp 下装了 vs2008 sql2008 ,但是最近要 sql 2000 ,不得已卸载了。装了双系统 win2003 但是上边 vs2008 sql2oo5,周一 我把他们清理干净,然后整个 vs2008+sql2008 好好琢磨琢磨。我原来买了本c#编程基础,全部winform 我刚又刚从dd上,买了最便宜的 c# webapplication书准备研究研究。谢谢 这个是可以做到的 里面有模板列 可以根据自己的要求来定义样式 并不是定死的 有时间给你写一个模板列的示例建议用VS2010+SQL2008 我现在就是这样的组合 之前装了VS2012后来看了下.Net4.5就增加了一些和Metro相关的东西 而且占用资源也比较大编程基础还是要看一下的 ASP.Net的后台代码还是C#的 更多的是学习他的控件的用法及运行机制 还有一些web方面的相关运用 加个Q吧 方便交流:359091135 asp.net帮不了你。asp.net根本不是针对客户端的,所以你只能离开asp.net,去学jQuery! 所有的asp.net(稍微)丰富功能的控件,都是很多年前(在1995~2005年前)的理念,都没有想到将来ajax会真正流行。而ajax流行时,asp.net项目组怎么应对?它停止了悲催的asp.net ajax toolkit的开发,在asp.net产品里边扔了一个jQuery的javascript文件,也就是说让开发人员自己去做jQuery插件,它已经不再涉及基于浏览器端的富客户端编程技术了。asp.net最近6、7年知识搞点莫名其妙的服务器端html代码生成,而并没有发明出新的任何一种比GridView之类更强大、并且有ajax交互特点的控件。假设你需要学现代的web客户端编程技术,跑到asp.net来找,是走错了地方。 网页中的文本框只能输入数字(目前已能过滤字母但不能过滤汉字) 如何获取iframe内网页的目录树控件点击时的值 localhost与local什么区别 调用web service 问题 急!!!! 求一循环的思路 程序操作平台转移产生的问题 这段代码有错误吗? Toolbr 里的按钮默认是有立体效果的,如何去掉? 关于把C++代码转换成C#代码--请高手帮忙 请各位大虾指点小弟,有什么好的C#的书,进阶级的!(入门级免) 求教育,求骂,求虐,求EF5.0入门和技巧 C#项目中,怎么使组合框的下拉值随着另一个组合框当前的Text改变而改变?
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%--这里需要添加一个下拉菜单的控件--%>
<asp:DropDownList ID="ddlTest" runat="server">
</asp:DropDownList>
<%-- 这是生成页面的源码
<select name="ddlTest" id="ddlTest">
<option value="0">选择项一</option>
<option value="1">选择项二</option>
<option value="2">选择项三</option>
--%>
</div>
</form>
</body>
</html>
Default.aspx.cs(也就是所说的后台代码)using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//判断是否是第一次请求页面
if (!IsPostBack)
{
BindDate();
}
}
//绑定数据
void BindDate()
{
//初始化测试数据
//当然 这里的数据一般来说都是从数据库读取 然后通过封装后获取的
List<Selection> list = new List<Selection>();
list.Add(new Selection("选择项一", 0));
list.Add(new Selection("选择项二", 1));
list.Add(new Selection("选择项三", 2)); //设置下拉菜单的数据源
this.ddlTest.DataSource = list;
//设置下拉菜单的显示内容的数据源字段
this.ddlTest.DataTextField = "Name";
//设置下拉菜单的值的数据源字段
this.ddlTest.DataValueField = "Value";
//绑定数据源
this.ddlTest.DataBind();
} /// <summary>
/// 选择项类
/// </summary>
public class Selection
{
//显示的选项名称
public string Name { get; set; }
//选项值
public int Value { get; set; }
//默认构造
public Selection()
{ }
//扩展构造
public Selection(string name, int value)
{
this.Name = name;
this.Value = value;
}
}
}
http://users.tpg.com.au/j_birch/plugins/superfish/#
Example 下面那种样子的吗?
例子是静态的,要动态的也简单。
把你的的树形栏目 数据后台构成成 <ul>... <li>...并按照Example 的CSS样式谁定好,形成完整的
字符串,传递到你的前台控件, 使用jquery 调用例子中的函数就行了。另外一做法,相对简单,使用 asp.net 原生组件 Menu,例子网上一堆~
如 ddlTest.DataSource= 你的数据表(DataTable) ,设置显示名称和值
ddlTest.DataTextField = "Name"; //设置下拉菜单的值的数据源字段 ddlTest.DataValueField = "Value";
使用控件 <asp:DropDownList ID="ddlTest" runat="server"> </asp:DropDownList>
绑定DataSet
string sql = "select * from T_labelinfo"; //查询数据库中要绑定的数据
DataSet ds = this.DataManager.Fill(sql);//这个是一个查询方法,你不用管
if (ds.Tables.Count > 0)//判断你是否查询到数据
{
ddlTest.DataSource = ds;//下拉控件绑定数据源
ddlTest.DataValueField = "labelID";//下拉控件的值是lableID这个字段的值
ddlTest.DataTextField = "constructionname";//下拉控件的文本是这个字段的值
ddlTest.DataBind();//绑定
}
这就OK了。不知道是不是你想要的。
感谢回答但是我说的下拉菜单 不是 select 我说的网站的主导航栏目,具有二级菜单.主页|产品|招聘|联系我们
产品有二级菜单.菜单表的结枸如下
menuid,menupid,menucaption,menutitle ,menudetail
但是我说的下拉菜单 不是 select 我说的网站的主导航栏目,具有二级菜单.主页|产品|招聘|联系我们
产品有二级菜单.菜单表的结枸如下
menuid,menupid,menucaption,menutitle ,menudetail
产品有二级菜单.菜单表的结枸如下
menuid,menupid,menucaption,menutitle ,menudetail
你去这个地址看看。。
http://blog.csdn.net/zhuyu19911016520/article/details/8194386
Default.aspx<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<%-- 页面添加一个菜单控件 --%>
<asp:Menu ID="Menu1" runat="server" Orientation="Horizontal">
</asp:Menu>
</div>
</form>
</body>
</html>
Default.aspx.cs(注释可能不够详细 如果楼主不明白意思可以在其中任一处加断点后调试 观察变量值 这样会有助于理解)using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TestDAL;
using System.Data;public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//判断是否是第一次请求页面
if (!IsPostBack)
{
BindMenu(Menu1, null, "0");
}
} /// <summary>
/// 绑定菜单(递归方法)
/// </summary>
/// <param name="mn">要绑定的菜单</param>
/// <param name="menu">菜单项</param>
/// <param name="mainMenu">菜单层级</param>
static void BindMenu(Menu mn , MenuItem menu , string mainMenu)
{
MenuItem mitem = null;
//获取所有的菜单列表
DataSet ds = TestService.GetMenus();
DataTable dt = ds.Tables[0];
//筛选 父级菜单为指定菜单级别的集合
DataRow[] drows = dt.Select("MenuPid='" + mainMenu + "'");
foreach (DataRow dr in drows)
{
mitem = new MenuItem();
mitem.Text = dr["MenuName"].ToString();
mitem.Value = dr["MenuId"].ToString();
//当菜单项为空时 表示为顶级菜单
if (menu == null)
{
//故添加至菜单
mn.Items.Add(mitem);
}
else //若不是 则为子菜单项
{
//添加至上级菜单的子项集合中
menu.ChildItems.Add(mitem);
}
//筛选 父级菜单为当前菜单项时
DataRow[] drs = dt.Select("MenuPid='" + mitem.Value + "'");
mainMenu = mitem.Value;
BindMenu(mn, mitem, mainMenu);
}
}
}
数据访问层数据库中的数据using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;namespace TestDAL
{
/// <summary>
/// Author:Echo
/// Time:2012/11/22 22:53:08
/// CLRVersion:4.0.30319.296
/// GUID:6f05e5cc-99ff-4dcc-907a-ca39815fc7dc
/// </summary>
public class TestService
{
/// <summary>
/// 获取所有的菜单项
/// </summary>
/// 表结构
/// ---------------------
/// MenuId Int
/// MenuName Nvarchar(50)
/// MenuPid Int
/// ---------------------
/// <returns></returns>
public static DataSet GetMenus()
{
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter();
using (SqlConnection con = DBHelper.Connection)
{
string sql = "SELECT * FROM Test";
SqlCommand cmd = new SqlCommand(sql, con);
da.SelectCommand = cmd;
try
{
da.Fill(ds, "menus");
return ds;
}
catch (Exception ex)
{
throw ex;
}
}
}
}
}
还有个问题 如果类似很酷的下拉菜单(栏目菜单导航) ,那又有什么好的办法呢。估计这个 menu 的样式是固定的,对不?能不能 整点想 模板王 那里的jquery 那么酷酷的菜单效果?我xp 下装了 vs2008 sql2008 ,但是最近要 sql 2000 ,不得已卸载了。装了双系统 win2003 但是上边 vs2008 sql2oo5,周一 我把他们清理干净,然后整个 vs2008+sql2008 好好琢磨琢磨。我原来买了本c#编程基础,全部winform
我刚又刚从dd上,买了最便宜的 c# webapplication书准备研究研究。谢谢
这个是可以做到的 里面有模板列 可以根据自己的要求来定义样式 并不是定死的 有时间给你写一个模板列的示例
建议用VS2010+SQL2008 我现在就是这样的组合 之前装了VS2012后来看了下.Net4.5就增加了一些和Metro相关的东西 而且占用资源也比较大
编程基础还是要看一下的 ASP.Net的后台代码还是C#的 更多的是学习他的控件的用法及运行机制 还有一些web方面的相关运用 加个Q吧 方便交流:359091135