2014-08-29 39 views
0

我的页面中有一些文本框。我从数据库中获取值,并在页面加载中更新文本框。我有一个代码来更新数据库中更新按钮后面的值。问题是,当我更改文本框的值并单击更新按钮时,文本框中的值又是原始值。它保留了它的价值。我的代码是文本框的值不会在asp.net中更新

protected void Page_Load(object sender, EventArgs e) 
    { 
     int id = Convert.ToInt32(Session["DocumentID"]); 
     Connection conn = new Connection(); 
     string query = "SELECT * from Document where DocumentID='" + id + "'"; 
     SqlCommand sqlcom = new SqlCommand(query, conn.conopen()); 
     SqlDataAdapter daexp = new SqlDataAdapter(sqlcom); 
     System.Data.DataTable dtexp = new System.Data.DataTable(); 
     daexp.Fill(dtexp); 
     TextBox1.Text = dtexp.Rows[0][1].ToString(); 
     TextBox3.Text = dtexp.Rows[0][2].ToString(); 
     TextBox6.Text = dtexp.Rows[0][3].ToString(); 
     TextBox4.Text = dtexp.Rows[0][4].ToString(); 
     TextBox5.Text = dtexp.Rows[0][5].ToString(); 
     TextBox7.Text = dtexp.Rows[0][6].ToString(); 
     TextBox7.ReadOnly = true; 
    } 



protected void Button1_Click(object sender, EventArgs e) 
    { 
    int id = Convert.ToInt32(Session["DocumentID"].ToString()); 
    if (FileUpload1.HasFile) 
    { 
     HttpPostedFile Image = FileUpload1.PostedFile; 
     string contentType = Image.ContentType; 
     if (contentType.Equals("application/octet-stream")) 
     { 
      contentType = "application/pdf"; 
     } 
     else if (contentType.Equals("application/vnd.openxmlformats-officedocument.wordprocessingml.document")) 
     { 
      contentType = "application/msword"; 
     } 
     int nFileLen = Image.ContentLength; 
     byte[] myData = new byte[nFileLen]; 
     Image.InputStream.Read(myData, 0, nFileLen); 
     Connection con = new Connection(); 
     con.conopen(); 
     string query = "UPDATE Document SET Setup='" + TextBox1.Text + "', ReferenceNO='" + TextBox3.Text + "', DocumentDate='" + TextBox6.Text + "', Subject='" + TextBox4.Text + "', NameOfInitiator='" + TextBox5.Text + "', [email protected], FolderID='" + DropDownList1.Text + "', DocTypeID='" + DropDownList4.Text + "', DirectorateID='" + DropDownList3.Text + "', OrganizationID='" + DropDownList2.Text + "' WHERE DocumentID='" + id + "'"; 
     SqlCommand sqlcom = new SqlCommand(query, con.conopen()); 
     sqlcom.Parameters.AddWithValue("@Doc", myData); 
     sqlcom.ExecuteNonQuery(); 
     Label12.Text = "Document Updated Successfully"; 
     Label12.ForeColor = System.Drawing.Color.Green; 
     Label12.Visible = true; 
     Label12.Text = "Document Updated Successfully"; 
     Label12.ForeColor = System.Drawing.Color.Green; 
     Label12.Visible = true; 
    } 
    else 
    { 
     Connection conn = new Connection(); 
     string query = "UPDATE Document SET Setup='" + TextBox1.Text + "', ReferenceNO='" + TextBox3.Text + "', DocumentDate='" + TextBox6.Text + "', Subject='" + TextBox4.Text + "', NameOfInitiator='" + TextBox5.Text + "', FolderID='" + DropDownList1.Text + "', DocTypeID='" + DropDownList4.Text + "', DirectorateID='" + DropDownList3.Text + "', OrganizationID='" + DropDownList2.Text + "' WHERE DocumentID='" + id + "'"; 
     SqlCommand sqlcom = new SqlCommand(query, conn.conopen()); 
     sqlcom.ExecuteNonQuery(); 
    } 
    } 

回答

0

您正在更新Page_Load中的数据库的文本框的值。每次页面回发时,它都会从数据库获取值,并在TextBoxes中进行设置。您需要添加检查并仅更新值,并且设置为文本框(如果页面第一次加载并且未回传)。就像这样:

protected void Page_Load(object sender, EventArgs e) 
{ 
if(!Page.IsPostBack) 
{ 
//your code here... 
} 
} 
+0

这解决了问题,谢谢你的快速反应..... – 2014-08-29 17:09:23

+0

标记为答案,请。 – 2014-08-29 17:15:07

0

我知道:asp.net PreInit -init -InitComplete -PreLoad令事件 - LoadPage - 控制事件 -LoadComplete -PreRender -SaveStateComplete -Render -unload

因此当你点击按钮时,网页将会回传。之后,调用pageload - > EventButton。文本框的值发生变化,因为您的文本框的值设置为pageload

编辑代码:

protected void Page_Load(object sender, EventArgs e) 
    { 
if(!Page.IsPostBack){ 
    int id = Convert.ToInt32(Session["DocumentID"]); 
    Connection conn = new Connection(); 
    string query = "SELECT * from Document where DocumentID='" + id + "'"; 
    SqlCommand sqlcom = new SqlCommand(query, conn.conopen()); 
    SqlDataAdapter daexp = new SqlDataAdapter(sqlcom); 
    System.Data.DataTable dtexp = new System.Data.DataTable(); 
    daexp.Fill(dtexp); 
    TextBox1.Text = dtexp.Rows[0][1].ToString(); 
    TextBox3.Text = dtexp.Rows[0][2].ToString(); 
    TextBox6.Text = dtexp.Rows[0][3].ToString(); 
    TextBox4.Text = dtexp.Rows[0][4].ToString(); 
    TextBox5.Text = dtexp.Rows[0][5].ToString(); 
    TextBox7.Text = dtexp.Rows[0][6].ToString(); 
    TextBox7.ReadOnly = true; 

}}