无法刷新datagrid

时间:2013-06-05 21:38:07

标签: c# wpf entity-framework

我有一个DataGrid,它会在启动时加载数据。用户可以点击几个按钮。每个按钮更新同一列。问题是,当保存该列的新值时,旧值仍显示在数据网格中。它必须刷新。我尝试了几种方法,例如:t_KlantenDataGrid.Items.Refresh()CollectionViewSource.GetDefaultView(t_KlantenDataGrid.ItemsSource).Refresh()。它们都不起作用。

加载数据的代码:

OV.AOVDataSet aOVDataSet = ((AOV.AOVDataSet)(this.FindResource("aOVDataSet")));
// Load data into the table t_Klanten. You can modify this code as needed.
AOV.AOVDataSetTableAdapters.t_KlantenTableAdapter aOVDataSett_KlantenTableAdapter = new AOV.AOVDataSetTableAdapters.t_KlantenTableAdapter();
aOVDataSett_KlantenTableAdapter.Fill(aOVDataSet.t_Klanten);
t_KlantenViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("t_KlantenViewSource")));
t_KlantenViewSource.View.MoveCurrentToFirst();

我使用Entity Framework。为什么这两个解决方案对我不起作用。还有其他解决方案可以刷新DataGrid吗?

3 个答案:

答案 0 :(得分:0)

如果您看到具有该类型数据绑定的旧值,则表示您不更新初始源,而只更新临时源(在您的情况下为t_KlantenViewSource)。对FindResource添加的数据调用Refresh方法会导致app从预编译资源重新加载,在这种情况下不会改变。

换句话说,问题是您使用的是预编译资源

同时,您使用实际数据填充数据集,但您的数据集位于内存中,查看源 - 内部应用程序文件。

您可以尝试:

  • 将整个数据网格或单独列的ItemsSource绑定到TableAdapter数据集
  • 将资源编译行为更改为Content,因此每次调用Refresh方法时,app都会从外部文件重新加载它。

此外:

您可以为您的案例找到solution,以节省时间。检查段落“执行更新”其他方法是为每个绑定参数提供NotifyPropertyChanged事件,但我不能说在这种情况下更好,假设您通过唯一按钮更新列。

简而言之,您点击/属性更改时需要这样的方法: aOVDataSett_KlantenTableAdapter.Update(aOVDataSet.t_Klanten)

答案 1 :(得分:0)

按钮单击后,首先将datagrid数据源设置为null,然后分配数据

  datagrid.datasource=null

答案 2 :(得分:0)

谢谢大家的回答。正如Jasmine建议的那样,我重新加载数据集并反弹数据网格。也许这不是最好的方法,但这是我当时唯一的解决方案。