初学.net,一开始就遇到了这样的问题:设计了一个DropdownList控件,帮定了DataView数据源,运行时列表框里显示了正常的项目,可是用鼠标不管点击哪项,始终只能选择第一项,而如果我使用ListItem控件手工填充列表,却是正常的。困绕我几天了,无计可施,请各位点拨一下! 代码是这样的:
<%@Import Namespace="System.Data" %>
<%@Import Namespace="System.Data.SqlClient" %>
<HTML>
<HEAD>
<title>default</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD> <body>
<form id="Form1" method="post" runat="server">
<asp:label id="Label1" runat="server">互联网信息管理系统</asp:label>
<asp:label id="Label2"  runat="server">用户</asp:label>
<asp:label id="Label3"  runat="server">口令</asp:label>
<asp:dropdownlist id="txtUsr"  runat="server"   AutoPostBack="true"></asp:dropdownlist>
<asp:TextBox id="txtPwd"  runat="server"
TextMode="Password"></asp:TextBox></FONT>
<asp:button id="Button1"  runat="server"
Text="登录" ></asp:button>
</form>
<script language="C#" runat="server">             private void Page_Load(object sender, EventArgs e)
{
                         string strConnect = "Data Source=(local);uid=aaa;pwd=aaa;Initial Catalog=glxt";       string strSelect = "SELECT * FROM userlist";       DataSet objDataSet = new DataSet();       SqlConnection objConnect = new SqlConnection(strConnect);
      SqlDataAdapter objDataAdapter = new SqlDataAdapter(strSelect, objConnect);       objDataAdapter.Fill(objDataSet, "userlist");

      DataView objDataView = new DataView(objDataSet.Tables["userlist"]); txtUsr.DataSource = objDataView;
txtUsr.DataValueField="name";
txtUsr.DataTextField="name";
txtUsr.DataBind();   // and bind (display) the data
// 在此处放置用户代码以初始化页面
}
</script>
</body>
</HTML>

解决方案 »

  1.   

    把Page_Load里的代码加上IsPostBack判断 private void Page_Load(object sender, EventArgs e)
    {        if(!this.IsPostBack){
               //你原来的代码
            }
    }
      

  2.   

    但如果不用数据绑定而是直接填充,则一切正常:<ASP:DropDownList id="txtUsr" runat="server" AutoPostBack="true">
    <asp:ListItem Text="aaa" Value="aaa"/>
    <asp:ListItem Text="bbb" Value="bbb"/>
    ......
    </asp:DropDownList>
    private void Page_Load(object sender, EventArgs e)
    {
                            //空 
    }
      

  3.   

    建议楼主单步调试下,在selectindexchanged事件里面察看看是否把选择的index回传
      

  4.   

    虫虫同志说得对,我已经按他的做法调好了。我可能是被那本《ASP.NET高级编程》里面的范例误导了,难道书上也有错?另外一个疑问是为什么如果用手工直接填充而不是绑定,那么不加这个IsPostBack也不会出错?等回复明天再节帖。
      

  5.   

    如果你不加IsPostBack判断,你在网页的任何一次动作,都会相当于重新加载一次页面,这样页面每次显示都是相同的初始界面,还那来的事件反应呢!