2009-03-02 6 views
4

私はC#のプロジェクトで作業していますが、これは非常に簡単です。どのように毎分C#のデータグリッドビューを更新しますか

ステータスボックス、2つのボタン、およびdataGridViewがあります。

フォームが読み込まれると、dataGridViewが正しく埋められます。

私がしたいことは、データベースの変更を反映するために45秒ごとにそのテーブルを更新することです。

私はこれを達成するための手法に関する提案を探しています。私は明確な情報を探してきましたが、やや不足しているようです。

答えて

7
  1. フォームにTimerコントロールを追加します。
  2. のいずれかがあなたのコードのどこかにフォームデザイナでTrueにタイマーのEnabledプロパティを設定する、または(値はミリ秒を表します)45000にそのIntervalプロパティを設定します(これは、コンポーネントのカテゴリにあります)。
  3. タイマーのTickイベントのハンドラを追加しますTickハンドラ内
  4. (あなたはタイマーをダブルクリックすることで、これを取得することができます)、更新あなたのdataGridView

あなたのハンドラは次のようになります。

private void timer1_Tick(object sender, EventArgs e) 
{ 
    // Update DataGridView 
} 

何らかの理由で更新を一時停止する必要がある場合は、timer1.Stop()に電話して、タイマーの実行を停止し、timer1.Start()を使用して再度起動することができます。

1

タイマーコントロールを使用して、必要な特定の増分で更新を実行します。

+0

注:タイマーコントロールのインクリメントをプロパティで設定できます。コントロールをダブルクリックすると、必要なイベントハンドラにアクセスできます。 – TheTXI

1

45秒ごとに発生するTimerを作成し、そのイベントハンドラからUIを更新できます。

5

他の人が示唆しているように、タイマーを使用してデータベースを再クエリーします。私が追加したいのは、データベースを再クエリするときに、DataGridViewのデータソースを新しいテーブルに設定するだけではないということです。むしろ、それを既存のテーブルとマージします。その理由は、ユーザーが特定の行を見ているグリッドの中央にいる場合、データソースを新しいテーブルにリセットすると、グリッド全体がリフレッシュされ、その場所が失われるためです。地獄のように迷惑!それでもをマージするとになりますが、それはユーザーにシームレスになります。

DataTable.Merge

Mergeメソッドを使用する際に注意すべき一つのことは、表に主キーを持っている必要があるということです。 DataTable自体にプライマリキーがあることを確認してください。必ずしもそれをデータベースから取り戻すわけではありません。あなたのような何かをする必要があるかもしれません:

table.PrimaryKey = new DataColumn[] {table.Columns["ID"]}; 
+0

@BFree:それは素晴らしいヒントです。これはASP.NETのGridViewにも変換できるものですか? – TheTXI

+0

私はASP.NETの専門家ではありませんが、私の限られた理解から、データベースにもう一度ヒットするためにポストバックする必要はありませんか?彼らはとにかく彼らの場所を失うのだろうか?たぶん、現在選択されている行をポストバックの前にキャッシュして、その行を再度選択することはできますか...わかりません... – BFree

+0

@BFree:ポストバックする必要があります。これは隠された宝石GridViewがロールバックしないようにします。私はMaintainScrollPositionを知っていましたが、スクロール可能なdiv内でうまく動作しません。 – TheTXI

0

私はタイマーイベントハンドラで再度datagridviewをバインドする必要があることを意味しますか?

関連する問題