2012-12-21 19 views
5

SQLサーバーのDBにバインドされたテーブルを表示するデータグリッドがあります。 60秒ごとにタイマーを設定して、更新をチェックして最新の更新データを表示したいと思います。WPF Datagrid-自動リフレッシュ

これまでのところ、私は今、私は、データベースから新しく更新されたデータを処理するためにイベントハンドラをさらに進める方法がわからないオブジェクト・ディスパッチャータイマーを含んでDataGridのevent_handler、

private void dataGrid1_loaded(object sender, RoutedEventArgs e) 
{ 
    DispatcherTimer dispatcherTimer = new DispatcherTimer(); 
    dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); 
    dispatcherTimer.Interval = new TimeSpan(0, 0, 60); 
    dispatcherTimer.Start(); 
} 

を作成しました。

dispatcherTimer_Tick 

ここには、データグリッドを埋めるために使用するselect文があります。

private void Page_Loaded(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     String selectstatement = "select top 2 ItemID, ItemName,ConsumerName, Street, DOJ from ConsumarTB order by ItemID "; 
     da = new SqlDataAdapter(selectstatement, con); 
     ds = new DataSet(); 
     da.Fill(ds); 
     dataGrid1.ItemsSource = ds.Tables[0].DefaultView; 

    } 
    catch (SqlException e) 
    { 
     Console.WriteLine(e.Message); 
    } 
} 

答えて

6

上記の改善策はたくさんあります。しかし、ここで私が最初に試してみたいことがあります。

以下は、ページロード時にデータグリッドにデータを入力し、60秒ごとにタイマーを設定します。タイマーが立ち上がると、再びデータをグリッドにロードするメソッドが呼び出されます。

//On PageLoad, populate the grid, and set a timer to repeat ever 60 seconds 
private void Page_Loaded(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     RebindData(); 
     SetTimer(); 
    } 
    catch (SqlException e) 
    { 
     Console.WriteLine(e.Message); 
    } 
} 

//Refreshes grid data on timer tick 
protected void dispatcherTimer_Tick(object sender, EventArgs e) 
{ 
    RebindData(); 
} 

//Get data and bind to the grid 
private void RebindData() 
{ 
    String selectstatement = "select top 2 ItemID, ItemName,ConsumerName, Street, DOJ from ConsumarTB order by ItemID "; 
    da = new SqlDataAdapter(selectstatement, con); 
    ds = new DataSet(); 
    da.Fill(ds); 
    dataGrid1.ItemsSource = ds.Tables[0].DefaultView; 
} 

//Set and start the timer 
private void SetTimer() 
{ 
    DispatcherTimer dispatcherTimer = new DispatcherTimer(); 
    dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); 
    dispatcherTimer.Interval = new TimeSpan(0, 0, 60); 
    dispatcherTimer.Start(); 
} 
+0

初心者のための素敵なイラスト。ありがとうございました。試してみましょう。 – user1221765

+1

これを実現するには、INotifyPropertyChangedを実装することをお勧めしますか? – user1221765

+1

これは 'ObservableCollection 'と 'INotifyPropertyChanged'を調べる絶好の機会です。カスタムクラスを作成し、グリッドを 'ObservableCollection 'にバインドする場合は、更新プログラムを再バインドする必要はありません。私はあなたがwpfの教育上の利益のためだけにそれをすることを強く勧めます。 :) – Khan