【问题标题】:How to display data from database into textbox, and update it如何将数据库中的数据显示到文本框中,并更新它
【发布时间】:2012-12-16 06:53:55
【问题描述】:

在从 sql 数据库检索数据后,我可以在我的文本框、下拉列表中显示我的数据,但是当我继续使用更新按钮时,在文本框或下拉列表中编辑的信息不会更新到数据库中。我试图在页面加载中删除代码,并手动重新键入所有数据,它可以更新。我想要的只是从数据库中检索数据并将其显示在文本框中,并且可以在从文本框中进行一些更改后将其更新到数据库中。有人可以帮我吗?谢谢。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
public partial class UpdateCustomerDetails : System.Web.UI.Page
{

protected void Page_Load(object sender, EventArgs e)
{
    SqlConnection con1 = new SqlConnection("Data Source=USER-PC;Initial Catalog=webservice_database;Integrated Security=True");
    DataTable dt = new DataTable();
    con1.Open();
    SqlDataReader myReader = null;  
    SqlCommand myCommand = new SqlCommand("select * from customer_registration where username='" + Session["username"] + "'", con1);

    myReader = myCommand.ExecuteReader();

    while (myReader.Read())
    {
        TextBoxPassword.Text = (myReader["password"].ToString());
        TextBoxRPassword.Text = (myReader["retypepassword"].ToString());
        DropDownListGender.SelectedItem.Text = (myReader["gender"].ToString());
        DropDownListMonth.Text = (myReader["birth"].ToString());
        DropDownListYear.Text = (myReader["birth"].ToString());
        TextBoxAddress.Text = (myReader["address"].ToString());
        TextBoxCity.Text = (myReader["city"].ToString());
        DropDownListCountry.SelectedItem.Text = (myReader["country"].ToString());
        TextBoxPostcode.Text = (myReader["postcode"].ToString());
        TextBoxEmail.Text = (myReader["email"].ToString());
        TextBoxCarno.Text = (myReader["carno"].ToString());
    }
    con1.Close();
}
protected void Button1_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection("Data Source=USER-PC;Initial Catalog=webservice_database;Integrated Security=True");
    SqlCommand cmd = new SqlCommand("UPDATE customer_registration SET password = @password, retypepassword = @retypepassword, gender = @gender, birth = @birth, address = @address, city = @city, country = @country, postcode = @postcode, email = @email, carno = @carno where username='" + Session["username"] + "'", con);
    con.Open();

    cmd.Parameters.AddWithValue("@password", TextBoxPassword.Text);
    cmd.Parameters.AddWithValue("@retypepassword", TextBoxRPassword.Text);
    cmd.Parameters.AddWithValue("@gender", DropDownListGender.Text);
    cmd.Parameters.AddWithValue("@birth", DropDownListDay.Text + DropDownListMonth.Text + DropDownListYear.Text);
    cmd.Parameters.AddWithValue("@address", TextBoxAddress.Text);
    cmd.Parameters.AddWithValue("@city", TextBoxCity.Text);
    cmd.Parameters.AddWithValue("@country", DropDownListCountry.Text);
    cmd.Parameters.AddWithValue("@postcode", TextBoxPostcode.Text);
    cmd.Parameters.AddWithValue("@email", TextBoxEmail.Text);
    cmd.Parameters.AddWithValue("@carno", TextBoxCarno.Text);

    cmd.ExecuteNonQuery();
    con.Close();
    if (IsPostBack)
    {
        Response.Redirect("UpdateSuccess.aspx");
    }
}

【问题讨论】:

    标签: c# asp.net sql-server-2008


    【解决方案1】:

    在 Page Init 事件中填充文本框值,而不是使用 Postback。

    protected void Page_Init(object sender, EventArgs e)
    {
        DropDownTitle();
    }
    

    【讨论】:

      【解决方案2】:
      protected void Page_Load(object sender, EventArgs e)
      
          {
      
              DropDownTitle();
          }
      
      
      protected void DropDownTitle()
      {
          if (!Page.IsPostBack)
          {
      
              string connection = System.Configuration.ConfigurationManager.ConnectionStrings["AuzineConnection"].ConnectionString;
      
              string selectSQL = "select DISTINCT ForumTitlesID,ForumTitles from ForumTtitle";
              SqlConnection con = new SqlConnection(connection);
              SqlCommand cmd = new SqlCommand(selectSQL, con);
              SqlDataReader reader;
              try
              {
      
                  ListItem newItem = new ListItem();
                  newItem.Text = "Select";
                  newItem.Value = "0";
                  ForumTitleList.Items.Add(newItem);
                  con.Open();
                  reader = cmd.ExecuteReader();
      
      
      
                  while (reader.Read())
                  {
                      ListItem newItem1 = new ListItem();
                      newItem1.Text = reader["ForumTitles"].ToString();
                      newItem1.Value = reader["ForumTitlesID"].ToString();
                      ForumTitleList.Items.Add(newItem1);
      
      
      
                  }
                  reader.Close();
                  reader.Dispose();
                  con.Close();
                  con.Dispose();
                  cmd.Dispose();
      
      
              }
              catch (Exception ex)
              {
                  Response.Write(ex.Message);
              }
      
          }
      }
      

      【讨论】:

        【解决方案3】:

        答案是@Kundan Singh Chouhan 建议的.IsPostBack。只是添加到它,将您的代码移动到 Page_Load 的单独方法中

        private void PopulateFields()
        {
          using(SqlConnection con1 = new SqlConnection("Data Source=USER-PC;Initial Catalog=webservice_database;Integrated Security=True"))
          {
            DataTable dt = new DataTable();
            con1.Open();
            SqlDataReader myReader = null;  
            SqlCommand myCommand = new SqlCommand("select * from customer_registration where username='" + Session["username"] + "'", con1);
        
            myReader = myCommand.ExecuteReader();
        
            while (myReader.Read())
            {
                TextBoxPassword.Text = (myReader["password"].ToString());
                TextBoxRPassword.Text = (myReader["retypepassword"].ToString());
                DropDownListGender.SelectedItem.Text = (myReader["gender"].ToString());
                DropDownListMonth.Text = (myReader["birth"].ToString());
                DropDownListYear.Text = (myReader["birth"].ToString());
                TextBoxAddress.Text = (myReader["address"].ToString());
                TextBoxCity.Text = (myReader["city"].ToString());
                DropDownListCountry.SelectedItem.Text = (myReader["country"].ToString());
                TextBoxPostcode.Text = (myReader["postcode"].ToString());
                TextBoxEmail.Text = (myReader["email"].ToString());
                TextBoxCarno.Text = (myReader["carno"].ToString());
            }
            con1.Close();
          }//end using
        }
        

        然后在你的 Page_Load 中调用它

        protected void Page_Load(object sender, EventArgs e)
        {
        
            if(!Page.IsPostBack)
            {
               PopulateFields();
            }
        }
        

        【讨论】:

        • 当您单击“保存”按钮时,再次调用 Page_Load 并使用数据库中的值重新填充您的控件。这会覆盖您的新条目...
        • 以前我对何时使用 IsPostBack 感到困惑,现在我知道 IsPostBack == false 时,它​​是第一次加载 page_load,当 IsPostBack == true 时,它​​会在单击按钮后进行一些更改.
        【解决方案4】:

        在页面加载时将所有语句包装在 !IsPostBack 条件中。

        protected void Page_Load(object sender, EventArgs e)
        {
           if(!IsPostBack)
           {
              // all statements
           }
        }
        

        这将解决您的问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-23
          • 1970-01-01
          • 2018-08-13
          相关资源
          最近更新 更多