您的位置:首页 > 运维架构

也谈谈动态绑定dropdownlist(2)

2004-07-09 08:44 429 查看
也谈谈动态绑定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" ) );//[/b]这里为新加代码[/b] DropDownList1.DataSource = dataSet.Tables["Table1"].DefaultView; //指定DropDownList使用的表里的那些字段 DropDownList1.DataTextField = "ItemName"; //dropdownlist的Text的字段 DropDownList1.DataValueField = "id";//dropdownlist的Value的字段 DropDownList1.DataBind(); 编译后生成的页面的代码: 1” id=”DropDownList1”> 5”>Item5 4”>Item4 3”>Item3 2”>Item2 1”>Item1 新加的All Item这项根本没有。 另:下面的网游说了那个方法我试了, DropDownList1.Items.Add( new ListItem( "ALL Item", "0" ) );//[/b]这里为新加代码[/b] 这句话改成:DropDownList1.Items.Insert( 0, new ListItem( "ALL Item", "0" ) );就行了。[/b] 如果放在在后面呢? //指定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" ) );//新加的代码 编译后的页面的代码为: Item5 Item4 Item3 Item2 Item1 ALL Item 好像ALL Item这项有了,但是是放在了最下面,这又不符合我们的一般的习惯。那么怎么办呢? 既然,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 { /// /// Example2 的摘要说明。 /// 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); } /// /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// 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" ) );//[/b]新加一个Item[/b] //取得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(); } 编译后的页面代码为: ALL Item Item5 Item4 Item3 Item2 Item1 我们目的就可以灵活的达到了。 所以说使用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都是个人喜好的问题了,这个都是属于编程技巧的范围了。呵呵,希望大家能一起交流编程的技巧和经验。 待续……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: