DataGrid绑定到Datatable而不刷新值

时间:2012-06-22 10:22:17

标签: c# wpf binding datagrid datatable

我有一个绑定到DataTable的DataGrid(“LastDatasets”)

当我通过以下代码刷新Timer中的DataTable时:

if (LastDatasets != null)
{
    var maxRow = LastDatasets.Select("id = MAX(id)").FirstOrDefault();

    var newds = dataInterface.ReadFromDatabase("SELECT * FROM daten WHERE id > " + dataInterface.SqlSep + "id LIMIT 30", new Dictionary<string, object>() {{"id", maxRow["id"]}});

    if (newds != null && newds.Rows.Count > 0)
    {
        LastDatasets.Merge(newds);
    }               
}

我的DataTable包含我的新数据,但WPF中的DataGrid没有刷新!

4 个答案:

答案 0 :(得分:1)

我使用简单绑定,我可以看到.Merge()之后的所有更改。所以你应该发布一些代码来看看哪里出错了。

 <DataGrid ItemsSource="{Binding MyDataTable}" />

vm.cs

 MyDataTable.Merge(newdata);

答案 1 :(得分:0)

阅读新数据后

DataGrid.Refresh();

答案 2 :(得分:0)

如果您正在使用绑定,请像这样使用

ItemsSource="{Binding yourdatasource,IsAsync=True, Mode=TwoWay}"

答案 3 :(得分:-1)

DataTable没有实现INotifyPropertyChanged,因此当属性发生更改时,无法通知DataGrid。如果您要将DataGrid绑定到一个对象的集合,这些对象在属性发生更改时引发了PropertyChanged事件,您会看到您的值更新。我相信您的解决方案是执行Ask和Refresh DataGrid的内容,或者将DataGrid绑定到实现INotifyPropety Changed而不是DataTable的对象集合。

要尝试的另一件事是在DataGrid上enable virtualization。默认情况下,应启用行虚拟化,但您可以通过设置EnableRowVirtualization = True进行双重检查。另外,也可以设置EnableColumnVirtualization = true