angelogogo
angelogogo

Reputation: 723

Textbox retains old value right before the update process asp.net

The problem is, that I am trying to update my database record trough user's input on a Textbox.

The code below shows how I pull the data to be displayed, and let the user make changes, and then update it on the button click

protected void Page_Load(object sender, EventArgs e)
{
    List<SqlParameter> parameters = new List<SqlParameter>();
    parameters.Add(new SqlParameter("@pid", Request.QueryString["perid"]));
    SqlDataReader reader = SqlHelper.ExecuteReader(connection, "get_person_to_update", parameters.ToArray());
    while (reader.Read()) 
    {
       fname.Text = reader["fname"].ToString();
       mname.Text = reader["mname"].ToString();
       lname.Text = reader["lname"].ToString();
       qualifier.Text = reader["qualifier"].ToString();
       alias_.Text = reader["alias"].ToString();
       address.Text = reader["address"].ToString();
       statussuspect.SelectedIndex = -1;
       statussuspect.SelectedValue = reader["status_of_suspect"].ToString();
     }

}

and here is the update code

protected void SAVEEDIT_Click(object sender, EventArgs e)
        {
            List<SqlParameter> parameters = new List<SqlParameter>();
            parameters.Add(new SqlParameter("@pid", Request.QueryString["perid"]));
            parameters.Add(new SqlParameter("@fname", fname.Text.Trim().ToUpper()));
            parameters.Add(new SqlParameter("@mname", mname.Text.Trim().ToUpper()));
            parameters.Add(new SqlParameter("@lname", lname.Text.Trim().ToUpper()));
            parameters.Add(new SqlParameter("@qualifier", qualifier.Text.Trim().ToUpper()));
            parameters.Add(new SqlParameter("@alias_", alias_.Text.Trim().ToUpper()));
            parameters.Add(new SqlParameter("@address", address.Text.Trim().ToUpper()));
            parameters.Add(new SqlParameter("@status", statussuspect.SelectedValue));
            int affecterows = SqlHelper.ExecuteNonQuery(connection, "update_person", parameters.ToArray());
            if (affecterows > 0)
            {
                //prompt for success
                if (statussuspect.SelectedValue == "DETAINED")
                {
                    if ((!Page.ClientScript.IsStartupScriptRegistered("alert")))
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "notifyedit();", true);
                    }
                }
                if ((!Page.ClientScript.IsStartupScriptRegistered("alert")))
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "notifysuccess();", true);
                }
           }
        }

The affecterows variable is returning -1, which means that there are no records updated.

Now, just to make sure that all is ok, I tried changing the content of the Textbox named alias_. To my surprise, upon clicking the save button the content of the alias_ Textbox returns to its original content.

Is there any additional property that needs to be set?

Thank you.

Upvotes: 0

Views: 1244

Answers (2)

Manu
Manu

Reputation: 418

Like this

 protected void Page_Load(object sender, EventArgs e)
    {
      if(!page.Ispostback)
       {
        List<SqlParameter> parameters = new List<SqlParameter>();
        parameters.Add(new SqlParameter("@pid", Request.QueryString["perid"]));
        SqlDataReader reader = SqlHelper.ExecuteReader(connection, "get_person_to_update", parameters.ToArray());
        while (reader.Read()) 
        {
            fname.Text = reader["fname"].ToString();
            mname.Text = reader["mname"].ToString();
            lname.Text = reader["lname"].ToString();
            qualifier.Text = reader["qualifier"].ToString();
            alias_.Text = reader["alias"].ToString();
            address.Text = reader["address"].ToString();
            statussuspect.SelectedIndex = -1;
            statussuspect.SelectedValue = reader["status_of_suspect"].ToString();
        }

    }

}

Upvotes: 2

SelvaS
SelvaS

Reputation: 2125

The Data binding logic in the Page_Load method binds the data on the click event PostBack. So change the Page_Load method like,

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            List<SqlParameter> parameters = new List<SqlParameter>();
            parameters.Add(new SqlParameter("@pid", Request.QueryString["perid"]));
            SqlDataReader reader = SqlHelper.ExecuteReader(connection, "get_person_to_update", parameters.ToArray());
            while (reader.Read())
            {
                fname.Text = reader["fname"].ToString();
                mname.Text = reader["mname"].ToString();
                lname.Text = reader["lname"].ToString();
                qualifier.Text = reader["qualifier"].ToString();
                alias_.Text = reader["alias"].ToString();
                address.Text = reader["address"].ToString();
                statussuspect.SelectedIndex = -1;
                statussuspect.SelectedValue = reader["status_of_suspect"].ToString();
            }
        }
    }

Upvotes: 3

Related Questions