读取数据库中的数据后代码如下
while (sdr.Read())
{
    ListItem item = new ListItem(sdr["NTp"].ToString(), sdr["NTpid"].ToString().Trim());
    DropDownList1.Items.Add(item);
}
结果下拉菜单中的Text没有问题,但是用DropDownList1.SelectedValue或者DropDownList1.SelectedItem.Value读出的Value全部都一样,为第一个下拉菜单的Value。怎么回事。
改成
while (sdr.Read())
{
    ListItem item = new ListItem();
    item.Text=sdr["NTp"].ToString();
    item.Value=sdr["NTpid"].ToString().Trim();
    DropDownList1.Items.Add(item);
}
结果还是一样的。
数据库读取操作没有问题。ASP.NETDropDownListC#

解决方案 »

  1.   

    你是不是设置了DropDownList1的AutoPostBack属性为true了呢?
      

  2.   

    很奇怪取 item.Text=sdr["NTp"].ToString();没问题。
    就是 item.Value=sdr["NTpid"].ToString().Trim();的时候不知道为啥他就只取第一条。
      

  3.   

    将你绑定DropDownList的代码放在public void Page_Init(object sender,EventArgs e)
    {
         //这里绑定DropDownList的值
    } Page_Init:是在页面未加载之前,也就是在页面初始化之前,在Page_Load之前调用的,可以在控件加载之前做一些客户端检测呀这些操作等。但这个事件对于当前用户来说,只会进行一次,也就是第一次访问这个页面的时候,其运行一次。
    Page_Load:在Page_Init之后运行(废话),用于加载控制以及页面的其它内容。客户端每刷新或是提交一次,Page_Load事件就重新绘制页面,将当前页面当新页面来处理。所以在Page_Load事件中经常要使用到IsPostback方法来判断是否第一次加载当页面第一次加载时,IsPostBack==false(不是回发,相当页面第一次加载)当页面第二次以上加载时,IsPostBack==true(是回发,说明不是第一次加载)第一次加载页面IsPostBack为false,所以会进行数据表绑定和页面初始化,当触发AutoPostBack=True后,页面响应客户端回送服务器,这样就不再重新绑定数据表了(应该有利于提高页面执行效率),因为任何输入或构建的数据都已被保留(以视图方式),同时执行相应的 OnCheckedChanged事件,如果没有IsPostBack的判断,页面就不断重新绑定数据表和初始化,自然也就执行不到客户端触发的相应事件。
      

  4.   

    额,我用Response.Write(DropDownList1.SelectedValue);和Response.Write(DropDownList1.SelectedItem.Text);测试后发现Text和Value都没问题但是我选完下拉菜单后一提交他又自动跳回第一个选项了。估计就是这里出问题了。但不知道怎么解决。
      

  5.   

    谢谢taomanman,以及各位大大们。问题解决了,就是没有判断是否是第一次加载。我都想抽自己了。