【问题标题】:DataGrid bound to Datatable not refreshing Values绑定到数据表的 DataGrid 不刷新值
【发布时间】:2012-06-24 15:29:11
【问题描述】:

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

当我通过此代码在 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 没有刷新!

【问题讨论】:

    标签: c# wpf binding datagrid datatable


    【解决方案1】:

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

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

    vm.cs

     MyDataTable.Merge(newdata);
    

    【讨论】:

      【解决方案2】:

      读取新数据后调用

      DataGrid.Refresh();
      

      【讨论】:

      • 这不是一个好的解决方案,因为那时整个 DataGrid 都会被重绘,但我只想绘制更改。因为整个重绘很慢!
      【解决方案3】:

      如果你正在使用绑定,那么像这样使用

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

      【讨论】:

        【解决方案4】:

        DataTable 没有实现INotifyPropertyChanged,因此无法在属性更改时通知您的DataGrid。如果您要将 DataGrid 绑定到在属性更改时引发 PropertyChanged 事件的对象集合,您会看到您的值更新。我相信您的解决方案是按照 Ask 所说的去做,Refresh DataGrid 的内容,或者将 DataGrid 绑定到实现 INotifyPropety Changed 而不是 DataTable 的对象集合。

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

        【讨论】:

        • 您是否曾经将数据表绑定到 wpf 数据网格?它的工作原理就像一个魅力,因为它作为 BindingListCollectionView 绑定到数据网格,这当然实现了 INotifyPropertyChanged
        • 当 DataRow 被修改时,它会调用 EndEdit(),而 EndEdit() 又会调用 DataTable 上的 SetNewRecord。然后 DataTable 引发 OnRowChanged 事件,该事件通知 DataView 并更新绑定。 DataTable 没有实现 INotifyPropertyChanged,单个单元格值不能只更新一行。
        猜你喜欢
        • 2021-10-20
        • 2023-04-09
        • 2010-11-22
        • 2012-07-05
        • 2011-06-27
        • 1970-01-01
        • 1970-01-01
        • 2014-02-01
        • 2013-03-18
        相关资源
        最近更新 更多