请问为什么没有办法取出DropDownList1.SelectedValue的值?
标记:
<asp:DropDownList ID="DropDownList1" runat="server">
           
        </asp:DropDownList>
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" 
            Width="73px" />
代码:
public partial class Default2 : System.Web.UI.Page
{
    SqlConnection sqlCn;
    SqlCommand sqlCmd;
    protected void Page_Load(object sender, EventArgs e)
    {
        DropDownList1.AutoPostBack = false;
        sqlCn = new SqlConnection("server=.;database=votes;uid=sa;pwd=");
        sqlCn.Open();        SqlDataAdapter sqlDa = new SqlDataAdapter("select *From voteItem", sqlCn);
        DataSet ds = new DataSet();
        sqlDa.Fill(ds);        DropDownList1.DataTextField = "voteItem";
        DropDownList1.DataValueField = "voteID";
        DropDownList1.DataSource = ds;
        DropDownList1.DataBind();
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Button1.Text = DropDownList1.SelectedValue;
    }
}

解决方案 »

  1.   


    protected void Page_Load(object sender, EventArgs e)
        { 
    if(IsPostBack)
    {
    DropDownList1.AutoPostBack = false;
            sqlCn = new SqlConnection("server=.;database=votes;uid=sa;pwd=");
            sqlCn.Open();        SqlDataAdapter sqlDa = new SqlDataAdapter("select *From voteItem", sqlCn);
            DataSet ds = new DataSet();
            sqlDa.Fill(ds);        DropDownList1.DataTextField = "voteItem";
            DropDownList1.DataValueField = "voteID";
            DropDownList1.DataSource = ds;
            DropDownList1.DataBind(); 
    }
    }
      

  2.   

    把你的sql语句复制到查询分析器里面看看能不能查出结果,再看看ds的值是否为空。
      

  3.   

    ("select *From voteItem", sqlCn); 
    这句话*后面应该有空格啊
      

  4.   

    你这样取到的是第一个值吧这样             if(!IsPostBack){
            SqlDataAdapter sqlDa = new SqlDataAdapter("select *From voteItem", sqlCn); 
            DataSet ds = new DataSet(); 
            sqlDa.Fill(ds);         DropDownList1.DataTextField = "voteItem"; 
            DropDownList1.DataValueField = "voteID"; 
            DropDownList1.DataSource = ds; 
            DropDownList1.DataBind(); 
        }
      

  5.   

    因为你没有把POSTBACK前后的处理分离开,当你在界面上触发了一个提交动作后会首先执行Page_Load方法,在这个方法中你进行了UI的初始化操作,也就是从数据库取值再绑定到DDL上。Page_Load方法以后再执行你的事件处理方法(Button1_Click方法),这个时候DDL的值已经被初始化,所以你取不到想要的值。这样无论你点击多少次,无论你怎么选都不能取到你要的值,而始终是刚初始化时的值。
    解决方法就是要像shenzhiwen所说的一样,用IsPostback判断把回发服务器前后的处理分离开。
    不只是DDL,所有其它的ASP.NET服务器控件都是一样,这是一个比较容易犯的错误。像这类问题只要了解一下ASP.NET的页面生命周期就清楚了
      

  6.   

    IsPostBack  应该用这个。不然每次你点击按钮后,都会从新赋值控件, 6 ,7楼说的都对,楼主可以参考!
      

  7.   

    DropDownList1.AutoPostBack = false; 
    这句也有问题,AutoPostBack改成true,不然选项改变后不postback,就不触发SelectedIndexChanged事件,还是捉不到选中的项。
    另外在取SelectedValue之前最好先判断一下if (xxx.selectedIndex != -1)
      

  8.   

    把你PageLoad里面的内容放在ispostback里面