1

我有一个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

4

3 回答 3

0

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

  datagrid.datasource=null
于 2013-06-29T15:51:38.910 回答
0

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

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

同时,您用实际数据填充数据集,但您的数据集在内存中,查看源代码 - 在应用程序文件中。

你可以试试:

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

添加:

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

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

于 2013-06-06T09:12:10.527 回答
0

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

于 2013-07-02T10:48:45.563 回答