2012-12-21 180 views
5

我有一個顯示其綁定到SQL服務器數據庫表中的數據網格。 我想設置爲每60秒的定時器,來檢查任何更新,然後顯示最新更新的數據。WPF 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