动态绑定dropdownlist --开始拣.NET
说来,很多的dropdownlist选项都不是固定的,是会动态改变的,一种方法是在页面上写死,改变时,直接修改页面就可以了。但是很多人是使用动态绑定的,因此dropdownlist的Text和Value是需要动态生成的。
首先我们来创建一个表来存放DropDownList的菜单选项:
create table DDLItem --下拉菜单选项表
(
id int Identity Primary Key, --编号
ItemName varchar(20) --菜单名称
)
再在web.config里添加:
<appSettings>
<add key="ConnectionString" value="server=127.0.0.1;uid=sa;password=1234;database=smsc" />
appSettings>
一个最常用的方法就是用DataSet作为数据源来绑定Dropdownlist的值。
首先我们先在页面上加上一个DropDownList和一个Button,如图所示:
源代码如下:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
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.Data.SqlClient;
using System.Configuration;
namespace BindDropDownList
{
///
/// Example1 的摘要说明。
///
public class Example1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DropDownList DropDownList1;
protected System.Web.UI.WebControls.Button Button1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
///
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
///
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Button1_Click(object sender, System.EventArgs e)
{
//取得Web.config里的数据库连接字串
string ConnString = ConfigurationSettings.AppSettings["ConnectionString"];
//创建一个SqlConnection
SqlConnection Conn = new SqlConnection( ConnString );
string SQL_Select = "select id, ItemName from DDLItem order by id desc";
//构造一个SqlDataAdapter
SqlDataAdapter myAdapter = new SqlDataAdapter( SQL_Select, Conn);
//开始读取数据
Conn.Open();
DataSet dataSet = new DataSet();
myAdapter.Fill( dataSet,"Table1" );
Conn.Close();
//开始绑定DropDownList
//指定DropDownList使用的数据源
DropDownList1.DataSource = dataSet.Tables["Table1"].DefaultView;
//指定DropDownList使用的表里的那些字段
DropDownList1.DataTextField = "ItemName"; //dropdownlist的Text的字段
DropDownList1.DataValueField = "id";//dropdownlist的Value的字段
DropDownList1.DataBind();
}
}
}
效果图如下:
未绑定的
绑定后的
这个方法比较简单实用,可以灵活的指定一个表里的任意字段为DropDownList的Text和Value值。但是DataSet包含的其他属性太多,就是相当于一个脱机的数据库。因此说来,不是很赞成使用这个方法绑定DropDownList。
在我的《也谈谈动态绑定dropdownlist(1)》的文章里,(http://blog.csdn.net/zsxfbj/archive/2004/07/08/36659.aspx)提到了的是利用dataset作为数据源来实现dataset的Item绑定。但是DataSet包含的内容和结构太多,我们只要求的是快速的绑定DropDownList的Item,而不对数据做任何的操作。所以说用DataSet做数据源的话,是不是有些大材小用的感觉?
而且在用DataSet做为数据源的时候,我们要指定:
DropDownList1.DataTextField = "ItemName"; //dropdownlist的Text的字段
DropDownList1.DataValueField = "id";//dropdownlist的Value的字段
这样的话,我们还要知道表的字段,这个方面不是很好。如果我们想在绑定一个叫Text为:All Item,Value为0的Item,用DataSet作为数据源时绑定会出现问题,我在绑定DropDownList1时,先指定上面我要加的Item项:
DropDownList1.Items.Add( new ListItem( "ALL Item", "0" ) );//这里为新加代码
DropDownList1.DataSource = dataSet.Tables["Table1"].DefaultView;
//指定DropDownList使用的表里的那些字段
DropDownList1.DataTextField = "ItemName"; //dropdownlist的Text的字段
DropDownList1.DataValueField = "id";//dropdownlist的Value的字段
DropDownList1.DataBind();
编译后生成的页面的代码:
<select name=”DropDownList1” id=”DropDownList1”>
<option value=”5”>Item5</option>
<option value=”4”>Item4</option>
<option value=”3”>Item3</option>
<option value=”2”>Item2</option>
<option value=”1”>Item1</option>
</select>
新加的All Item这项根本没有。如果发在后面呢?
//指定DropDownList使用的数据源
//DropDownList1.Items.Add( new ListItem( "ALL Item", "0" ) );//新加的代码
DropDownList1.DataSource = dataSet.Tables["Table1"].DefaultView;
//指定DropDownList使用的表里的那些字段
DropDownList1.DataTextField = "ItemName"; //dropdownlist的Text的字段
DropDownList1.DataValueField = "id";//dropdownlist的Value的字段
DropDownList1.DataBind();
DropDownList1.Items.Add( new ListItem( "ALL Item", "0" ) );//新加的代码
编译后的页面的代码为:
<select name="DropDownList1" id="DropDownList1">
<option value="5">Item5</option>
<option value="4">Item4</option>
<option value="3">Item3</option>
<option value="2">Item2</option>
<option value="1">Item1</option>
<option value="0">ALL Item</option>
</select>
好像<option value="0">ALL Item</option>这项有了,但是是放在了最下面,这又不符合我们的一般的习惯。那么怎么办呢?
既然,DropDownList1.Items可以Add一个new ListItem,而且DataSet做数据源太浪费,我们又不对数据做任何修改,那么我们只是Read一下就可以了。下面就看看这段代码:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
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.Data.SqlClient;
using System.Configuration;
namespace BindDropDownList
{
/// <summary>
/// Example2 的摘要说明。
/// </summary>
public class Example2 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DropDownList DropDownList1;
protected System.Web.UI.WebControls.Button Button1;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Button1_Click(object sender, System.EventArgs e)
{
//取得Web.config里的数据库连接字串
string ConnString = ConfigurationSettings.AppSettings["ConnectionString"];
//创建一个SqlConnection
SqlConnection Conn = new SqlConnection( ConnString );
string SQL_Select = "select id, ItemName from DDLItem order by id desc";
//创建一个SqlCommand
SqlCommand myCommand = new SqlCommand( SQL_Select, Conn );
//读取数据记录并绑定
myCommand.Connection.Open();
//使用DataReader读取速度更快
SqlDataReader myReader = myCommand.ExecuteReader();
while ( myReader.Read() )
{
DropDownList1.Items.Add( new ListItem( myReader["ItemName"].ToString(),myReader["id"].ToString() ) );//增加Item
//或者这样也能绑定,
//DropDownList1.Items.Add( new ListItem( myReader[1].ToString(),myReader[0].ToString() ) );//增加Item
//都是要在知道Sql语句或者数据表结构的前提下才能这样绑定
}
myCommand.Connection.Close();
}
}
}
编译运行后,效果一样,但是更节省了系统的开销。而且我们也可以方面的添加特别的Item,比如这样:
private void Button1_Click(object sender, System.EventArgs e)
{
DropDownList1.Items.Add( new ListItem( "ALL Item", "0" ) );//新加一个Item
//取得Web.config里的数据库连接字串
string ConnString = ConfigurationSettings.AppSettings["ConnectionString"];
//创建一个SqlConnection
SqlConnection Conn = new SqlConnection( ConnString );
string SQL_Select = "select id, ItemName from DDLItem order by id desc";
//创建一个SqlCommand
SqlCommand myCommand = new SqlCommand( SQL_Select, Conn );
//读取数据记录并绑定
myCommand.Connection.Open();
//使用DataReader读取速度更快
SqlDataReader myReader = myCommand.ExecuteReader();
while ( myReader.Read() )
{
DropDownList1.Items.Add( new ListItem( myReader["ItemName"].ToString(),myReader["id"].ToString() ) );//增加Item
//或者这样也能绑定,
//DropDownList1.Items.Add( new ListItem( myReader[1].ToString(),myReader[0].ToString() ) );//增加Item
//都是要在知道Sql语句或者数据表结构的前提下才能这样绑定
}
myCommand.Connection.Close();
}
编译后的页面代码为:
<select name="DropDownList1" id="DropDownList1">
<option value="0">ALL Item</option>
<option value="5">Item5</option>
<option value="4">Item4</option>
<option value="3">Item3</option>
<option value="2">Item2</option>
<option value="1">Item1</option>
</select>
我们目的就可以灵活的达到了。
所以说使用SqlDataReader加Add ListItem可以更快的绑定DropDownList。但是DataSet也可以想这样的绑定DropDownList:
private void Button1_Click(object sender, System.EventArgs e)
{
//取得Web.config里的数据库连接字串
string ConnString = ConfigurationSettings.AppSettings["ConnectionString"];
//创建一个SqlConnection
SqlConnection Conn = new SqlConnection( ConnString );
string SQL_Select = "select id, ItemName from DDLItem order by id desc";
//构造一个SqlDataAdapter
SqlDataAdapter myAdapter = new SqlDataAdapter( SQL_Select, Conn);
//开始读取数据
Conn.Open();
DataSet dataSet = new DataSet();
myAdapter.Fill( dataSet,"Table1" );
Conn.Close();
//开始绑定DropDownList
DataTable dataTable = dataSet.Tables["Table1"];
foreach( DataRow dataRow in dataTable.Rows )
{
DropDownList1.Items.Add( new ListItem( dataRow[1].ToString(), dataRow[0].ToString() ) );
}
// //指定DropDownList使用的数据源
// //DropDownList1.Items.Add( new ListItem( "ALL Item", "0" ) );//新加的代码
// DropDownList1.DataSource = dataSet.Tables["Table1"].DefaultView;
// //指定DropDownList使用的表里的那些字段
// DropDownList1.DataTextField = "ItemName"; //dropdownlist的Text的字段
// DropDownList1.DataValueField = "id";//dropdownlist的Value的字段
// DropDownList1.DataBind();
// DropDownList1.Items.Add( new ListItem( "ALL Item", "0" ) );//新加的代码
}
转载于:https://www.cnblogs.com/MaxIE/archive/2006/07/15/451422.html
动态绑定dropdownlist --开始拣.NET相关推荐
- 使用DataGrid动态绑定DropDownList
简单的使用模板列绑定DropDownList,初学者想必都会了,但有时候,我们要做的就是在编辑的时候想让某一列定制为DropDownList,并且根据正常情况下显示的值自动变换DropDownList ...
- 错误中积累经验,BUG中寻发展,总结中提升
1.动态绑定DropDownList时,要注意绑定Text和Value,显示的是Text,程序中提取的是Value: 2. cross join 是笛卡儿乘积 就是一张表的行数乘以另一张表的行数 ...
- datagrid资料+ by iCeSnaker - Program rhapsody
datagrid资料+ by iCeSnaker - Program rhapsody 关于datagrid的打印 http://www.chinaaspx.com/article/csharp/29 ...
- DataGrid 功能实现收集(一)
DataGrid相邻行有相同内容时对指定列合并 /// <summary> /// DataGrid相邻行有相同内容时对指定列合并 /// </summary> /// < ...
- DataGrid 功能实现收集(转)保留做参考
DataGrid相邻行有相同内容时对指定列合并 /**//// <summary> /// DataGrid相邻行有相同内容时对指定列合并 /// </summary> /// ...
- 【转贴CSDN】关于DataGrid的精华
[转贴CSDN]关于DataGrid的精华 1.DataGrid动态模板列更新数据并且分页的例子 http://www.cnblogs.com/lovecherry/archive/2005/03/2 ...
- 来自CSDN的精华网址
来自CSDN的精华网址,包括:WebForm中DataGrid及其它程序员收藏的精华 自认为以下文章比较经典,希望对初学者有用^_^ 1.DataGrid动态模板列更新数据并且分页的例子 http:/ ...
- 来自CSDN或其它的精华网址
来自CSDN的精华网址 1.DataGrid动态模板列更新数据并且分页的例子 http://www.cnblogs.com/lovecherry/archive/2005/03/26/126102.h ...
- 【分享】WebForm中DataGrid的20篇经典文章
1.DataGrid动态模板列更新数据并且分页的例子 http://www.cnblogs.com/lovecherry/archive/2005/03/26/126102.html 2.DataGr ...
最新文章
- 【UML 建模】UML建模语言入门-视图,事物,关系,通用机制
- 通过iframe标签绕过csp
- 协程的挂起、恢复和调度的原理 (二)
- 为别人做嫁衣——代理模式
- django 怎么加权限 静态资源目录_Django:settings中关于static静态文件目录的设置...
- 集团bim对集团项目服务器,BIM再添一员,五洋建设集团BIM项目组举行成立仪式
- 全栈工程师薪水_2020 Java 全栈工程师进阶路线图,不可错过
- 将不确定变为确定~一切归总为“二”(C#中的位运算有啥用)
- C#委托之个人理解(转)
- python 常用快捷键
- ftp服务器支持ipv6,IPV6下搭建FTP服务器的步骤
- Tcp网络通信中各个状态的含义
- word 目录 有一部分无无虚线,解决办法
- Leetcode热门100之两数相加
- 和风天气获取天气情况
- win10电脑桌面便签怎么添加
- 机器学习(Hands on)第二章修正版完整代码
- 移动端页面键盘弹出后导致body高度变低背景图片被挤上去解决方法
- python selenium 教程(-) 安装
- Java Swing实现仿win7计算器