4

いくつかのフィールドとグリッドビューを持つ単純な Web フォームがあります。保存とキャンセルボタンもあります。

ユーザーがキャンセルを押したときに、フォーム上のデータに対して行われたことを元に戻す方法が必要です。これはフィールドで十分に簡単ですが、グリッドビューへの変更はデータベースに対してリアルタイムで発生するため、元に戻す機能を取得する方法がわかりません。

gridview への変更をビューステートに保存することを考えましたが、余分なスペースが必要なため、保存したくありません。

また、変更を保存し、必要に応じてロールバックする一時テーブルについても考えました。

フォームから元に戻す機能を取得する方法を知っている人はいますか?

4

4 に答える 4

2

すべてのデータをセッション オブジェクトに保持し、準備ができたらデータベースに書き込みます。データ層を抽象化すると、セッション オブジェクトと対話する ObjectDataSource を使用できます。

現在、e コマース サイトのチェックアウト システムでこの方法を使用しています。データベース スキーマを模倣するカスタム オブジェクトにデータを保存します。

于 2008-10-01T23:36:05.027 に答える
1

最も簡単な解決策は、ユーザーが [保存] ボタンをクリックするまで、グリッドビューの変更をデータベースにコミットしないことです。

後で元に戻す変更を記録するために viewstate などを使用することにした場合は、最初の変更を行ったときと同じ種類の予防措置を講じることを忘れないでください: 衝突を更新します。

于 2008-10-01T23:38:37.110 に答える
0

1 つの方法は、テーブルへの変更を、そのアプリケーション インスタンスのタイムスタンプと識別子と共に別のテーブルに格納することです。特定の時間以降の変更を元に戻したい場合は、その識別子のその日付までリストを逆方向にトラバースします。

于 2008-10-01T23:33:30.960 に答える
0

うーん...データオブジェクトをセッションにロードし、(MyObject)Session["MyObject"]オブジェクトからコントロールをバインドします。ObjectDataSource にフックしてセッションを使用できると思います...その後、Update イベントをオーバーライドして、変更がセッションに書き込まれるようにすることができます。

ユーザーが保存をクリックすると、セッション オブジェクトを取得して保存します。MyObject obj = (MyObject)Session["MyObject"]; MyObject.Save()

複数レベルの元に戻すことはできません...ただし、本当に必要な場合は、複数のセッションオブジェクトを保存できると思います。

于 2008-10-01T23:53:46.200 に答える