1

テキストボックスにデータベースから取得したデータを入力し、ユーザーがデータを編集できるページにボタンを配置し、このボタンをクリックしてから、コードビハインドからデータベースに変更を設定します

しかし、データを送信したい場合 (たとえばtxtName.Text、ソース値が "John" で、それを "Tom" に変更します) をデータベースに送信すると、"John" と表示されますtxtName.Text(最後の値に新しい値がないことを意味します)。

なぜ?

//Load Data
protected void Page_Load(object sender, EventArgs e)
{ 
      DataSet ds = ....
      txtName.Text = ds.Tables[0].Rows[0][1].ToString();
}

//Update
protected void reg_Click(object sender, EventArgs e)
{
     string name=txtName.Text;
     //i change value of txtName.Text but see value as same as value in ds.Tables[0].Rows[0][1].ToString() that i select from DB
}
4

2 に答える 2

1

これは、リクエストごとにテキストボックスの値を上書きしているためです。コードを に入れると、次のif (!IsPostBack)ように動作します。

protected void Page_Load(object sender, EventArgs e)
{
      if (!IsPostBack)
      {
          DataSet ds = ....
          txtName.Text = ds.Tables[0].Rows[0][1].ToString();
      }
}

protected void reg_Click(object sender, EventArgs e)
{
     string name=txtName.Text;
}

と の両方にブレークポイントを配置するPage_Loadreg_Click、状況が明らかになります。Page_Loadリクエストごとに呼び出されます。ポストバック (ボタンのクリックが原因) の場合、ボタン クリック ハンドラーの前に呼び出されるため、データベースから読み取った元の値でテキスト ボックスの (編集された) 値が上書きされます。

于 2012-10-08T20:32:20.210 に答える
0

@Sajjjjjjad - @M4N は正しいです。「Page_Load」で if(!Page.IsPostBack) を使用する必要があります。その理由は、ポストバックを行うたびに Page_Load がヒットするため、コードに従って、「reg_Click」メソッドを呼び出すと、最初に Page_load メソッドにヒットし、次に入力した値を置き換える「reg_Click」メソッドにヒットします。テキストボックス。

ページ サイクル プロセスを理解するには、asp.net ページ ライフ サイクルを参照してください -> http://msdn.microsoft.com/en-us/library/ms178472.aspx

問題がある場合はお知らせください。

于 2012-10-08T20:41:38.023 に答える