也谈谈动态绑定dropdownlist(2)

** 也谈谈动态绑定 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();

编译后生成的页面的代码:

1<select 1”="" id="”DropDownList" name="”DropDownList">
2<option 5”="" value="”">Item5</option>
3<option 4”="" value="”">Item4</option>
4<option 3”="" value="”">Item3</option>
5<option 2”="" value="”">Item2</option>
6<option 1”="" value="”">Item1</option>
7</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" ) ); // 新加的代码

编译后的页面的代码为:

1<select id="DropDownList1" name="DropDownList1">
2<option value="5">Item5</option>
3<option value="4">Item4</option>
4<option value="3">Item3</option>
5<option value="2">Item2</option>
6<option value="1">Item1</option>
7<option value="0">ALL Item</option>
8</select>

好像

1<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

{

///

1<summary>
2
3///  Example2  的摘要说明。 
4
5///  </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);

}

///

1<summary>
2
3///  设计器支持所需的方法  \-  不要使用代码编辑器修改 
4
5///  此方法的内容。 
6
7///  </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"];

<span lang="EN" style="FONT-SIZE: 10pt; FONT-FAMILY: 新宋体; mso-hansi-fo

Published At
Categories with Web编程
Tagged with
comments powered by Disqus