2012-01-23 26 views
0

現在、私のアプリケーションでは、グリッド行をクリックすると、ページのコントロールにグリッド行エントリを入力します。変更を保存するためのUPDATEボタンがあります。しかし、コントロールの値を変更せずに[更新]ボタンをクリックしても、更新は同じ値で行われます。ログテーブルへのエントリをトリガーします。フォームエントリが変更されない場合の更新を回避する方法

グリッドをクリックしたときにコントロールの値がロードされているものと異なる場合にのみ、更新を呼び出すようにフォームを作成する方法はありますか。

更新: アプリケーションはMVVMのようなパターンを使用していません。構造体は、UI以外のフォームを獲得するのに非常にスリムです。 db相互作用のためのADO.net。これはすでに私がこのプロジェクトに参加したときに作られました&でも、私はwpfを初めて使っています。

誰でもお手伝いできますか?

+0

MVVMなどのパターンを使用していますか?あなたのアプリケーションのデザインを説明してください。 –

+0

GridViewのItemsSourceをバインドしましたか? –

+0

私はデータグリッドのアイテムソースを持っています。私はグリッド自体のエントリを更新していません。私はテキストボックス、コンボボックスなどのコントロールを分離するためにdemをロードします –

答えて

0

これを行う最も簡単な方法は、ユーザー入力を取得するために使用されるコントロールにハンドラを追加することです。これはブール値のプロパティe.dを設定します。 RowWasEditedをtrueに設定します。その後、UPDATEボタンのクリックイベントでこのプロパティをチェックし、必要なアクションを実行し、falseに設定します。

しかし、私はこれよりもエレガントなものがあると確信しています。

+0

あなたの解決策は動作しますが、まだ少し "匂い"です。私は、更新をチェックするフォームにプライベートブール値を保持するのではなく、ビジネスエンティティ自体の変更を追跡する方が良いと思います。 –

2

グリッドに表示されているエンティティの変更を追跡する必要があると思います。更新が実行されるたびに、エンティティの状態をチェックし、必要なエンティティのみを更新します。基本的には、エンティティの変更を追跡するためにProperty Settersのレベルでインターセプトする必要があります。考えてみましょう:

  1. エンティティの状態を追跡するためのいくつかの機能を持つ基本クラスを使用します。非常に単純です:ブールhasChangedまたはそれ以上の "複雑な"列挙型で、追加、変更、削除などがあります。
  2. プロパティの変更が実行されるとすると
  3. 基底クラスにブールまたは列挙型で店舗情報この基本クラスからプロパティの変更
  4. を傍受するためのパブリックプロパティとプライベートバッキングフィールドを持つ
  5. 作業を他のエンティティを導出更新は、グリッドに表示されたエンティティを介してユーザーループによって開始され、変更が加えられたエンティティを選択してデータベースに送信します。

このことについていくつか参考になっ理論は次のようになります。

Change tracking on businees objects

Using Properties C# programming guide

ADO.NET Self Tracking Entities

私は、カップリングは、ユーザインターフェースの間でどのようにしっかりとあなたの質問から知っていませんとデータベース(ADO.NET DataTablesなど)が含まれています。上記のアイデアは、物事の「デカップリング」を必要とします。しかし、アプリケーションのさらなる機能のための良い基盤であり、作業の容易さ、明確なフレームワーク、メンテナンスの改善、パフォーマンスの向上をもたらす可能性があります。

関連する問題