当dropdownlist值改变ASP.NET时,文本框不会更新

时间:2013-12-30 11:27:22

标签: c# asp.net

我有四个文本框,其值需要根据下拉列表中的选择进行更改。但是当我更改值时,文本框不会更新

我的代码:

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" 
 DataSourceID="Employees"  DataTextField="FullName" DataValueField="FullName"           
 OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
    <asp:SqlDataSource ID="Employees" runat="server" 
     ConnectionString="<%$ConnectionStrings:MyConnectionString %>"     
     SelectCommand="SELECT [FullName] FROM [Employees]   ORDER BY      [FirstName]">           
   </asp:SqlDataSource>

和班级档案:

public partial class WebForm1 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        string cn = "Data Source=.;Initial Catalog=DBRE ;Integrated Security=True";
        SqlConnection scon = new SqlConnection(cn);

        SqlCommand scmd = new SqlCommand("Select * from Employees where FullName = '" + DropDownList1.SelectedItem.Value + "'", scon);
        SqlDataReader sdr;

        try
        {
           scon.Open();
           sdr = scmd.ExecuteReader();
           txtName.Text = sdr["FirstName"].ToString();
           txtSurname.Text = sdr["LastName"].ToString();
           txtDepartment.Text=sdr["Dept"].ToString();
           txtCostCentre.Text=sdr["CostCentre"].ToString();
        }
        catch (Exception ex)
        {
        }

        finally
        {
            scon.Close();
        }

我在这里做错了什么?

3 个答案:

答案 0 :(得分:0)

删除AutoPostBack="True"

<asp:DropDownList ID="DropDownList1" runat="server"
 DataSourceID="Employees"  DataTextField="FullName" DataValueField="FullName"           
 OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">

并添加if(!ispostback)条件

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
       if (!isPostback)
        {
        string cn = "Data Source=.;Initial Catalog=DBRE ;Integrated Security=True";
        SqlConnection scon = new SqlConnection(cn);

        SqlCommand scmd = new SqlCommand("Select * from Employees where FullName = '" + DropDownList1.SelectedItem.Value + "'", scon);

        SqlDataReader sdr;

        try
        {
           scon.Open();

           sdr = scmd.ExecuteReader();
           txtName.Text = sdr["FirstName"].ToString();
           txtSurname.Text = sdr["LastName"].ToString();
           txtDepartment.Text=sdr["Dept"].ToString();
           txtCostCentre.Text=sdr["CostCentre"].ToString();
        }

        catch (Exception ex)
        {
        }   
        finally
        {
            scon.Close();
        }
    }
}

答案 1 :(得分:0)

可能我想检查异常,使用Reader或使用ExecuteScalar

using (var reader = cmd.ExecuteReader())
    {
        if (reader.Read())
        {
            learerLabel.Text = reader.GetString(reader.GetOrdinal("somecolumn"))
        }
    }

检查

dynamically filled DropDownList does not retain value on postback ASP.net c#

尝试 EnableViewState =“true”

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"  EnableViewState="true" DataSourceID="Employees"  DataTextField="FullName" DataValueField="FullName"          
 OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>

答案 2 :(得分:0)

使用AutoPostBack设置您的下拉列表=&#34; true&#34;选中的on索引改变如下:

     <asp:DropDownList ID="ddl" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlPNo_selectedChanged" ></asp:DropDownList>

在您的代码中,使用以下代码将数据加载到您的下拉列表中:

     String conn = System.Configuration.ConfigurationManager.ConnectionStrings["CONSTRING"].ConnectionString;
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!IsPostBack)
        {
            SqlConnection con = new SqlConnection(conn);
            SqlDataAdapter da = new SqlDataAdapter("select Code from table1", con);
            DataSet ds = new DataSet();
            con.Open();
            da.Fill(ds);
            con.Close();
            ddl.DataSource = ds.Tables[0];
            ddl.DataValueField = "Code";
            ddl.DataBind();
            ddl.Items.Insert(0, new ListItem("-- select --"));
        }
    }

现在,您可以使用以下代码绑定下拉列表中的数据:

     protected void ddl_selectedChanged(object sender, EventArgs e)
    {
        String strConnString = ConfigurationManager.ConnectionStrings["CONSTRING"].ConnectionString;
        String strQuery = "select description from table1 where Code = @Code";
        SqlConnection con = new SqlConnection(strConnString);
        SqlCommand cmd = new SqlCommand();

        cmd.Parameters.AddWithValue("@Code", ddl.SelectedItem.Value);
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = strQuery;
        cmd.Connection = con;

        try
        {
            con.Open();
            SqlDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                txtbdescription.Text = dr["description"].ToString();
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            con.Close();
            con.Dispose();
        }
    }

其中txtbdescription是文本框的ID。

希望这会有所帮助。