このドキュメントによると、グリッドビューを追加し、onupdate を実装しました。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowediting.aspx
ページを開いて edit をクリックすると、editinex が設定され、再バインドされます。
protected void rowEdit(object sender, GridViewEditEventArgs e)
{
EditProducts.EditIndex = e.NewEditIndex;
EditProducts.DataBind();
}
3 番目の列で、値を変更します (たとえば、「こんにちは」を「さようなら」に変更します)。次に、「更新」をクリックします。(最初の列は編集と削除、または更新とキャンセルのボタン列で、2 番目の列は ID を示します)。
onrowupdate メソッドが呼び出され、msdn のサンプル コード (2 番目のデータ列) に従って列 3 の値を取得しようとします。
protected void RowUpdating(object sender, GridViewUpdateEventArgs e)
{
GridViewRow row = EditProducts.Rows[e.RowIndex];
String previousValue= ((TextBox)(row.Cells[2].Controls[0])).Text;
String actualValue = Request.Params["EditProducts$ctl02$ctl03"];
文字列 previousValue は「さようなら」ではありません。まだ「こんにちは」です。
Firefox では、「さようなら」が送信されていることがわかりますが、rowUpdating の TextBox コントロールの値は「hello」です。ビューステートから誤って取得する必要があります。
そのため、request.params を取得する actualValue を追加し、「さようなら」に設定しました。
次の質問があります。
msdn で提供されているコードは間違っていますか?
TextBox コントロールは、送信時に入力に含まれる値の Text プロパティを表すはずではありませんか?