• 动态绑定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" ) );//新加的代码



    }

  • 相关阅读:
    AE(ArcGIS Engine)的安装与配置(附加ArcGIS安装及所需安装包)
    C# 封装
    如何修改C# winform程序图标
    C#中ESRI.ArcGIS.esriSystem的引用问题
    c#窗体进度条
    【转】C#路径中获取文件全路径、目录、扩展名、文件名称
    【转】C# Application.DoEvent()的作用
    如何在Word中批量选中特定文本
    GIT
    git使用
  • 原文地址:https://www.cnblogs.com/MaxIE/p/451422.html
Copyright © 2020-2023  润新知