C# 绑定到Datatable的DataGrid未刷新值
我有一个绑定到DataTable(“LastDatasets”)的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
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}"