0

DataGridViewからのデータを表示するがありますSQL tablesqldependencyデータが変更されたときにアラートが発生しDataGridView、更新されたデータがすぐに表示されるように使用しています。新しい行は定期的にこのテーブルに追加されます。これが発生した場合は、最初のデータグリッドからそれらの新しい行のみを取得し、別のにデータを入力しますDataGridView

で少し実験しましたRowAdded eventが、グリッドビューがによって更新されるたびにテーブル内のすべての行にアラートが作成されるため、完全に単純ではありませんsqldependency

誰かが似たようなことをした経験がありますか?

4

1 に答える 1

1

すべての行Grid Aを含む最初の DataGridView と、新しい行Grid Bのみを表示する DataGridViewを呼び出しましょう。グリッド A への変更を観察してグリッド B の内容を定義しないでください。代わりに、「新しい行」とは何かについて独自の定義を作成してください。これを行う簡単な方法の 1 つは、更新のたびに (SqlDependency オブジェクトの OnChange イベントで) グリッド A のコンテンツのコピーを作成することです。次に、次の更新で、行を選択して「新しい行」DataSet に入れることができるようになります。

SqlDependency オブジェクトの OnChange ハンドラーの疑似コードを次に示します (これは、グリッド A を満たす SqlCommand を監視する必要があります)。

  1. Grid A データソースから行を選択する SqlCommand を実行し、 LastUpdateという 2 番目のテーブルの ID を持つ行を除外する NOT IN 句を使用します(手順 2 を参照)。これがグリッド B のデータ ソースになります。
  2. Grid A データ ソースのすべての行を LastUpdate テーブルにコピーする SqlCommand を実行します。最初に LastUpdate の内容を削除してから、次の形式のステートメントを実行するのが最も簡単な場合があります。INSERT INTO LastUpdate(ID) SELECT ID FROM table_x
  3. グリッド A を正常に更新します。

強調したい点は、この更新戦略によって、データ クエリと UI が効果的に分離されるということです。言い換えれば、グリッド B を駆動するデータは、グリッド A にまったく依存しません。この原則に固執すれば、はるかに保守しやすいアプリケーションにたどり着くはずです。

于 2013-02-25T06:14:34.757 に答える