简体   繁体   English

更改下拉列表值时,ASP.NET不会更新文本框

[英]Textboxes dont update when dropdownlist value is changed ASP.NET

I have four text boxes whose value I need to change based on the selection in a dropdown list. 我有四个文本框,需要根据下拉列表中的选择更改其值。 but when I change the value, the textboxes don't update 但是当我更改值时,文本框不会更新

My codes: 我的代码:

<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>

And class file: 和类文件:

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();
        }

What am i doing wrong here? 我在这里做错了什么?

Remove AutoPostBack="True" 删除AutoPostBack="True"

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

And add if (!ispostback) condition 并添加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();
        }
    }
}

May be i think check the exception, Use Reader like or use ExecuteScalar 可能是我认为检查异常,像使用Reader或使用ExecuteScalar

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

Check this 检查一下

dynamically filled DropDownList does not retain value on postback ASP.net c# 动态填充的DropDownList不会在回发ASP.net上保留值c#

Try EnableViewState="true" 尝试EnableViewState =“ true”

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

Set your dropdownlist with AutoPostBack="true" with the on selected index changed like this: 使用AutoPostBack =“ true”设置您的下拉列表,其中选定索引的更改如下:

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

And in your code behind load data into your dropdownlist with the following code: 并在后面的代码中使用以下代码将数据加载到下拉列表中:

     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 --"));
        }
    }

Now you can bind data on dropdownlist changed with the following code: 现在,您可以将数据绑定到使用以下代码更改的dropdownlist上:

     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();
        }
    }

where txtbdescription is the id of your textbox. 其中txtbdescription是您的文本框的ID。

Hope this will help. 希望这会有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM