Reputation: 171
I have page where on Page_Load I populate some textbox and dropdownlist with data I getting from the database, I getting the data right, but when I click the button to save the new data it take the old data and not the new data for the update.
I putting my code: Page_load:
string id = Request.QueryString["id"];
OleDbConnection conn = new OleDbConnection(@"Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" + Server.MapPath("path to DB"));
OleDbCommand comm = new OleDbCommand("select * from table where ID=" + id, conn);
OleDbDataReader reader;
conn.Open();
reader = comm.ExecuteReader();
reader.Read();
ddlType.SelectedIndex = (Convert.ToInt32(reader["PersonType"]) - 1); // -1 to fix position, list is zero based. type 1(0) = PP type 2(1) = DC
txtFirstName.Text = reader["FirstName"].ToString();
txtLastName.Text = reader["LastName"].ToString();
txtAddress.Text = reader["Address"].ToString();
txtCountry.Text = reader["Country"].ToString();
txtPhone.Text = reader["Phone"].ToString();
txtFax.Text = reader["Fax"].ToString();
txtClinic.Text = reader["Clinic"].ToString();
txtReferredBy.Text = reader["ReferingFactor"].ToString();
txtWebSite.Text = reader["WebSite"].ToString();
txtReceiptNumber.Text = reader["Receipt"].ToString();
txtDeviceType.Text = reader["DeviceType"].ToString();
txtDeviceSerialNumber.Text = reader["DeviceSerialNumber"].ToString();
txtPaymentType.Text = reader["PaymentType"].ToString();
txtDevicePrice.Text = reader["DevicePrice"].ToString();
txtClientUserName.Text = reader["PersonUserName"].ToString();
txtClientPassword.Text = reader["PersonPassword"].ToString();
txtComments.Text = reader["Comment"].ToString();
The save button:
string personType = ddlType.SelectedValue;
string firstName = txtFirstName.Text;
string lastName = txtLastName.Text;
string address = txtAddress.Text;
string country = txtCountry.Text;
string phone = txtPhone.Text;
string fax = txtFax.Text;
string clinic = txtClinic.Text;
string referredBy = txtReferredBy.Text;
string website = txtWebSite.Text;
string receiptNumber = txtReceiptNumber.Text;
string deviceType = txtDeviceType.Text;
string deviceSerialNumber = txtDeviceSerialNumber.Text;
string paymentType = txtPaymentType.Text;
string devicePrice = txtDevicePrice.Text;
string clientUserName = txtClientUserName.Text;
string clientPassword = txtClientPassword.Text;
string comments = txtComments.Text;
string id = Request.QueryString["id"];
OleDbConnection conn = new OleDbConnection(@"Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" + Server.MapPath("path to DB"));
string str = "update table set PersonType = ?, FirstName = ?, LastName = ?, Address = ?, Country = ?, Phone = ?, Fax = ?, Clinic = ?, ReferingFactor = ?, WebSite = ?, Receipt = ?, DeviceType = ?, DeviceSerialNumber = ?, PaymentType = ?, DevicePrice = ?,PersonUserName = ?, PersonPassword = ?, Comment = ? where ID = ?";
using (conn)
{
using (OleDbCommand cmd = new OleDbCommand(str, conn))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("PersonType", personType);
cmd.Parameters.AddWithValue("FirstName", firstName);
cmd.Parameters.AddWithValue("LastName", lastName);
cmd.Parameters.AddWithValue("Address", address);
cmd.Parameters.AddWithValue("Country", country);
cmd.Parameters.AddWithValue("Phone", phone);
cmd.Parameters.AddWithValue("Fax", fax);
cmd.Parameters.AddWithValue("Clinic", clinic);
cmd.Parameters.AddWithValue("ReferingFactor", referredBy);
cmd.Parameters.AddWithValue("WebSite", website);
cmd.Parameters.AddWithValue("Receipt", receiptNumber);
cmd.Parameters.AddWithValue("DeviceType", deviceType);
cmd.Parameters.AddWithValue("DeviceSerialNumber", deviceSerialNumber);
cmd.Parameters.AddWithValue("PaymentType", paymentType);
cmd.Parameters.AddWithValue("DevicePrice", devicePrice);
cmd.Parameters.AddWithValue("PersonUserName", clientUserName);
cmd.Parameters.AddWithValue("PersonPassword", clientPassword);
cmd.Parameters.AddWithValue("Comment", comments);
cmd.Parameters.AddWithValue("PersonID", id);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
What I am doing wrong and how I make it right? Sorry if this ask before but I did not find the answer. I think it has something with postback, am I right?
If you need more information, please write me what is needed. Thanks ( I edit some of the words on the command string)
Upvotes: 1
Views: 258
Reputation: 5636
You have to use Page.IsPostback Property like
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// Put your code inside this.
string id = Request.QueryString["id"];
OleDbConnection conn = new OleDbConnection(@"Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" + Server.MapPath("path to DB"));
OleDbCommand comm = new OleDbCommand("select * from table where ID=" + id, conn);
OleDbDataReader reader;
conn.Open();
reader = comm.ExecuteReader();
reader.Read();
ddlType.SelectedIndex = (Convert.ToInt32(reader["PersonType"]) - 1); // -1 to fix position, list is zero based. type 1(0) = PP type 2(1) = DC
txtFirstName.Text = reader["FirstName"].ToString();
txtLastName.Text = reader["LastName"].ToString();
txtAddress.Text = reader["Address"].ToString();
txtCountry.Text = reader["Country"].ToString();
txtPhone.Text = reader["Phone"].ToString();
txtFax.Text = reader["Fax"].ToString();
txtClinic.Text = reader["Clinic"].ToString();
txtReferredBy.Text = reader["ReferingFactor"].ToString();
txtWebSite.Text = reader["WebSite"].ToString();
txtReceiptNumber.Text = reader["Receipt"].ToString();
txtDeviceType.Text = reader["DeviceType"].ToString();
txtDeviceSerialNumber.Text = reader["DeviceSerialNumber"].ToString();
txtPaymentType.Text = reader["PaymentType"].ToString();
txtDevicePrice.Text = reader["DevicePrice"].ToString();
txtClientUserName.Text = reader["PersonUserName"].ToString();
txtClientPassword.Text = reader["PersonPassword"].ToString();
txtComments.Text = reader["Comment"].ToString();
}
}
Hope it works..
Upvotes: 2
Reputation: 2707
when page load for first time only then u should load data to controls
if (!IsPostBack)
{
txtFirstName.Text = reader["FirstName"].ToString();
txtLastName.Text = reader["LastName"].ToString();
txtAddress.Text = reader["Address"].ToString();
txtCountry.Text = reader["Country"].ToString();
txtPhone.Text = reader["Phone"].ToString();
txtFax.Text = reader["Fax"].ToString();
txtClinic.Text = reader["Clinic"].ToString();
txtReferredBy.Text = reader["ReferingFactor"].ToString();
txtWebSite.Text = reader["WebSite"].ToString();
txtReceiptNumber.Text = reader["Receipt"].ToString();
txtDeviceType.Text = reader["DeviceType"].ToString();
txtDeviceSerialNumber.Text = reader["DeviceSerialNumber"].ToString();
txtPaymentType.Text = reader["PaymentType"].ToString();
txtDevicePrice.Text = reader["DevicePrice"].ToString();
txtClientUserName.Text = reader["PersonUserName"].ToString();
txtClientPassword.Text = reader["PersonPassword"].ToString();
txtComments.Text = reader["Comment"].ToString();
}
Upvotes: 1
Reputation: 9064
Its beacause you are passing old values to database.
Pass the new values in textbox in update queries.
Sample:
OleDbConnection conn = new OleDbConnection(@"Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" + Server.MapPath("path to DB"));
string str = "update table set PersonType = ?, FirstName = ?, LastName = ?, Address = ?, Country = ?, Phone = ?, Fax = ?, Clinic = ?, ReferingFactor = ?, WebSite = ?, Receipt = ?, DeviceType = ?, DeviceSerialNumber = ?, PaymentType = ?, DevicePrice = ?,PersonUserName = ?, PersonPassword = ?, Comment = ? where ID = ?";
using (conn)
{
using (OleDbCommand cmd = new OleDbCommand(str, conn))
{
cmd.CommandType = CommandType.Text;
cmd.Parameters.AddWithValue("FirstName", txtFirstName.Text);
cmd.Parameters.AddWithValue("LastName", lastName);
.
.
.
}
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
Upvotes: 1