2012-12-21 231 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