分享
 
 
 

也谈谈动态绑定dropdownlist(2)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

也谈谈动态绑定dropdownlist(2)

在我的《也谈谈动态绑定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" ) );//新加的代码

}

当然,怎么绑定DropDownList都是个人喜好的问题了,这个都是属于编程技巧的范围了。呵呵,希望大家能一起交流编程的技巧和经验。

待续……

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有