天天看點

也談談動态綁定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都是個人喜好的問題了,這個都是屬于程式設計技巧的範圍了。呵呵,希望大家能一起交流程式設計的技巧和經驗。

待續……

轉載于:https://www.cnblogs.com/yongbin621/archive/2009/06/12/1501907.html