【问题标题】:WPF Datagrid- auto refreshWPF Datagrid - 自动刷新
【发布时间】:2012-12-09 03:35:54
【问题描述】:

我有一个显示绑定到 SQL 服务器数据库的表的数据网格。 我想每 60 秒设置一个计时器,检查任何更新,然后显示最新更新的数据。

到目前为止,我已经为数据网格创建了一个 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);
     }
}

【问题讨论】:

    标签: c# wpf sql-server-2008 wpfdatagrid


    【解决方案1】:

    有很多方法可以改善上述内容。但这是我会尝试的初学者。

    下面将在页面加载时填充您的数据网格,设置一个计时器以每 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();
    }
    

    【讨论】:

    • 适合初学者的精美插图。谢谢。让我试着回复你。
    • 通过实现 INotifyPropertyChanged 来实现这一点是个好主意?
    • 这是一个了解ObservableCollection<T> 和INotifyPropertyChanged 的好机会。如果您创建自定义类并将网格绑定到ObservableCollection<MyCustomClass>,则不需要重新绑定更新。我强烈建议您这样做只是为了 wpf 教育利益。 :)
    • @JefferyKhan:你好 Jeffery,如何使用 INotifypropertyChanged 实现自动刷新数据网格项?我尝试从 sqlserver 显示数据网格(使用 MVVM 方式),并且成功,但是当我的数据源更改时,它不会反映在我的 UI 中。您是否可以使用带有 ObservableCollection 的 INotifypropertyChanged 发布另一个解决方案
    猜你喜欢
    • 1970-01-01
    • 2013-11-06
    • 2010-12-19
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 2011-06-27
    相关资源
    最近更新 更多