C# ASP.NET DROPDOWNLIST控件绑定数据库,用DropDownList1.SelectedValue.ToString 读取的选项值始终是第一项的值的解决方法

27 篇文章 3 订阅

1、C# ASP.NET  DROPDOWNLIST控件绑定数据库,数据库内容如下

     数据库有3个字段:id,name,map。

     数据库只有1个表,表名为  table1    

2、前台代码如下:

        <asp:DropDownList ID="DropDownList1" runat="server" style="z-index: 1; left: 360px; top: 80px; position: absolute; height: 35px; width: 220px; bottom: 343px">
        </asp:DropDownList>

 3、后台代码如下:

 public static DataTable Table(string sql)
        {
            using (MySqlConnection conn = new MySqlConnection(ConnStr))
            {
                MySqlDataAdapter sda = new MySqlDataAdapter(sql, conn);
                DataTable dt = new DataTable();
                sda.Fill(dt);
                return dt;
            }
        }


static string ConnStr = "Server=localhost;UserId=root;Password=12345678;Database=reservoirinfo;pooling=false;CharSet=utf8;port=3306";

    protected void Page_Load(object sender, EventArgs e)
        {
            string sql = string.Format(" select * from table1");          
            DropDownList1.Items.Clear();
            DropDownList1.DataSource = Table(sql);;
            DropDownList1.DataTextField = "name";
            DropDownList1.DataValueField = "id";
            DropDownList1.DataBind();
        }

    protected void Button1_Click(object sender, EventArgs e)
        {
    
            string ss1 = DropDownList1.SelectedValue.ToString();
      
        }

4、网页运行画面
    明明选中的是第二项

但是打断点观察得到的值始终是第一项的值,参见下图: 

5、解决方法

    Page_Load(object sender, EventArgs e) 新增加了一行如下代码:           

    if (!IsPostBack)  
    {
          ......
    }

即可解决,不加入此判断,“SelectedIndexChanged”事件中ID会一直获取的是下拉列表的首行ID。 

 

6、解决后完整的代码

public static DataTable Table(string sql)
        {
            using (MySqlConnection conn = new MySqlConnection(ConnStr))
            {
                MySqlDataAdapter sda = new MySqlDataAdapter(sql, conn);
                DataTable dt = new DataTable();
                sda.Fill(dt);
                return dt;
            }
        }
 

static string ConnStr = "Server=localhost;UserId=root;Password=12345678;Database=reservoirinfo;pooling=false;CharSet=utf8;port=3306";

    protected void Page_Load(object sender, EventArgs e)
        {
            string sql = string.Format(" select * from table1");   
   
            if (!IsPostBack)
            {
                DropDownList1.Items.Clear();
                DropDownList1.DataSource = Table(sql); ;
                DropDownList1.DataTextField = "id";//这才是要显示的字段
                DropDownList1.DataValueField = "id";//必须绑定int类型,不写发布会出错
                DropDownList1.DataBind();
                DropDownList1.Items.Insert(0, new ListItem("--请你选择--"));  //插入空项,此项必须放到数据绑定之后
            }
        }
 
    protected void Button1_Click(object sender, EventArgs e)
        {
     
            string ss1 = DropDownList1.SelectedValue.ToString();
       
        }

 

,可以通过GridView的RowDataBound事件来实现。具体步骤如下: 1. 在GridView的列添加一个TemplateField,将该列的ItemTemplate设置为一个DropDownList控件。 2. 在GridView的RowDataBound事件获取当前行的数据,并根据其一列的来设置DropDownList的数据源和选项。 代码示例: ``` protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { // 获取当前行的数据 DataRowView dataRow = (DataRowView)e.Row.DataItem; // 获取DropDownList控件 DropDownList ddl = (DropDownList)e.Row.FindControl("DropDownList1"); // 根据另一列的设置DropDownList的数据源和选项 string value = dataRow["ColumnName"].ToString(); if (value == "Value1") { ddl.DataSource = GetDataForValue1(); ddl.SelectedValue = dataRow["OtherColumnName"].ToString(); } else if (value == "Value2") { ddl.DataSource = GetDataForValue2(); ddl.SelectedValue = dataRow["OtherColumnName"].ToString(); } // 其他情况... ddl.DataBind(); } } // 获取DropDownList的数据源 private DataTable GetDataForValue1() { // TODO: 返回数据源 } private DataTable GetDataForValue2() { // TODO: 返回数据源 } // 在aspx添加以下代码: <asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:DropDownList ID="DropDownList1" runat="server"></asp:DropDownList> </ItemTemplate> </asp:TemplateField> <!-- 其他列... --> </Columns> </asp:GridView> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值