Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定到Datatable的DataGrid未刷新值_C#_Wpf_Binding_Datagrid_Datatable - Fatal编程技术网

C# 绑定到Datatable的DataGrid未刷新值

C# 绑定到Datatable的DataGrid未刷新值,c#,wpf,binding,datagrid,datatable,C#,Wpf,Binding,Datagrid,Datatable,我有一个绑定到DataTable(“LastDatasets”)的DataGrid 当我通过以下代码刷新计时器中的数据表时: if (LastDatasets != null) { var maxRow = LastDatasets.Select("id = MAX(id)").FirstOrDefault(); var newds = dataInterface.ReadFromDatabase("SELECT * FROM daten WHERE id > " + d

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

当我通过以下代码刷新计时器中的数据表时:

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);
    }               
}
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(){{“id”,maxRow[“id”]});
如果(newds!=null&&newds.Rows.Count>0)
{
LastDatasets.Merge(newds);
}               
}

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

读取新数据调用后

DataGrid.Refresh();

DataTable未实现,因此在属性更改时无法通知DataGrid。如果要将DataGrid绑定到一个对象集合,该对象在属性更改时引发PropertyChanged事件,则会看到值更新。我认为您的解决方案是按照Ask的要求执行,并刷新DataGrid的内容,或者将DataGrid绑定到实现InotifyProperty Changed而不是DataTable的对象集合


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

我使用简单绑定,并且可以看到.Merge()之后的所有更改。所以你应该发布更多的代码,看看哪里出了问题

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

如果您使用的是绑定,那么像这样使用

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

这不是一个好的解决方案,因为这样整个DataGrid就会被重新绘制,但我只想绘制更改。因为整个重绘过程非常缓慢!您是否曾经将datatable绑定到wpf datagrid?它的工作方式类似于charme,因为它作为BindingListCollectionView绑定到datagrid,这当然已经实现了INotifyPropertyChanged。当修改DataRow时,它调用EndEdit(),后者反过来调用DataTable上的SetNewRecord。DataTable随后引发OnRowChanged事件,该事件通知DataView并更新绑定。DataTable未实现INotifyPropertyChanged,单个单元格值不能仅更新一行。
ItemsSource="{Binding yourdatasource,IsAsync=True, Mode=TwoWay}"