適切にバインドされているASP.Netグリッドビューがあります.編集時に特定のフィールドを編集しています.その後、他の行も編集する必要があります.しかし、他の行を編集しようとすると、以前に編集した行がリセットされ、古いものが保持されます値。
要件は、多くの行を編集する必要があり、ボタンをクリックすると、すべての編集値をデータベースにプッシュする必要があるということです
ポストバック間でGridViewのデータソースを維持する必要があります。
これを行うには、DataTableをキャッシュ、セッション、または任意の永続ストレージに保存します。
行を編集したら、変更をこのDataTableに保存してから、Gridviewを(このDataTableから)再バインドします。
ユーザーが[すべて保存]をクリックすると、DataTableの変更された行をデータベースに保存できます。
どの行が変更されたかを追跡する必要がある場合は、キャッシュまたはセッションで変更されたPrimaryKeyのリストを維持できます。
グリッドをバインドする前に、Page_Loadイベント内の!IsPostBackをチェックしていますか?Page_Loadイベントでグリッドをバインドしていない場合は、グリッドをバインドするコードを投稿してください。
これは、データテーブルを保持するセッション変数を更新するためのコードです。これは、Gridview の RowUpdating イベントで行う必要があります。
protected void grdRepayment_RowUpdating(オブジェクト送信者、GridViewUpdateEventArgs e)
{
DataTable myDatatable;
GridViewRow row = grdRepayment.Rows[e.RowIndex];
grdRepayment.EditIndex = -1;
if (row != null)
{
myDatatable = (DataTable)Session["TempTable"];
for (int i = 0; i < myDatatable.Rows.Count; i++)
{
if (e.RowIndex == i)
{
myDatatable.Rows[i][1] = Convert.ToString(Client);
myDatatable.Rows[i][2] = Convert.ToString(Principal);
Session["TempTable"] = myDatatable;
grdRepayment.EditIndex = -1;
grdRepayment.DataSource = myDatatable;
grdRepayment.DataBind();
}
}
}
}
RowEditing および RowCancellingEdit イベントでのみ、このセッション変数からグリッドをバインドするようにしてください。編集作業が完了したら、ボタンをクリックするだけで、編集されたコンテンツがデータベースにプッシュされます...
コードの問題は、ページの読み込み時にグリッドをバインドすることです。そのため、ページの読み込み時に、データベースにある値をバインドできます。ポストバックでバインドメソッドを書き込み、セッションまたは非表示フィールドの値を維持します.保存ボタンをクリックすると、そのセッションまたは非表示フィールドでデータベースが更新されます..
gridview バインディング メソッドがページ ロードの呼び出しであり、!isPostBack の内部であることを確認してください。
為に
Void page_load()
{
if(!IsPostBack)
{
//Call GridView Binding method
}
}
protected void grdRepayment_RowEditing(オブジェクト送信者、GridViewEditEventArgs e)
{
grdRepayment.EditIndex = e.NewEditIndex;
myDatatable = (DataTable)Session["TempTable"];
grdRepayment.DataSource = myDatatable;
grdRepayment.DataBind();
}
これは、RowEditing と RowCancelingEdit でグリッドをバインドする必要がある方法です。