DevExpress WPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能产品,都能通过DevExpress WPF控件来实现。
本文列举了最常见的数据更新问题列表,并介绍如何解决这些问题。
GridControl单元格在更改数据项属性中的值后不更新其内容
问题
当更改数据项属性中的值时,DevExpress WPF GridControl不会更新单元格中的内容。
解决方案
检查您的数据项类是否实现了INotifyPropertyChanged 接口,并在其属性被修改时引发PropertyChanged事件。
如果您不想手动实现INotifyPropertyChanged 接口,使用以下解决方案当中的一个:
- 从Mvvm.BindableBase类派生您的类并实现数据项属性。
- 将数据项实现为POCO类。在这种情况下,使用Bindable Properties部分中描述的属性,并在ViewModelSource类的帮助下生成数据项。
- 在源生成器的帮助下实现视图模型。
数据源不支持更新机制
问题
您不能改变数据项类并实现INotifyPropertyChanged接口,仍然需要刷新Grid Control中的数据。
解决方案
- 要刷新GridControl中的所有单元格,请使用DataControlBase.RefreshData方法。
- 要刷新特定数据行的单元格,请调用DataControlBase.RefreshRow方法,传递一个RowHandle作为参数。
GridControl单元格在更改绑定实体框架源中的值后不更新其内容
问题
如果将GridControl绑定到实体框架源,则单元格在数据更改时不会更新其内容。
解决方案
尝试以下解决方案:
- 使用DataControlBase.RefreshData和DataControlBase.RefreshRow方法来更新单元格值。
- 检查属性通知,确保实体实现INotifyPropertyChanged 接口,并为修改的属性引发PropertyChanged事件。
GridControl不反映添加或删除数据项后的更改
问题
当您在数据源集合中添加或删除数据项时,GridControl不反映更改。当您使用的数据源集合没有实现INotifyCollectionChanged 接口,也没用引发它的CollectionChanged事件时,就会发生这个问题,结果是GridControl不会收到关于集合更改的任何通知。
解决方案
为了解决这个问题,使用一个实现INotifyCollectionChanged接口的集合类型。例如尝试ObservableCollection<T>集合类型。
网格外的数据发生变化后,GridControl不执行数据管理操作
问题
Data Grid不执行数据管理操作(排序、过滤、分组),当数据在GridControl外部更改时,也不重新计算汇总。
解决方案
要强制GridControl更新排序、分组、过滤和摘要,请将DataControlBase.AllowLiveDataShaping选项设置为true。
注意:GridControl可以根据您的数据项类是否实现INotifyPropertyChanged接口和您的数据源集合类型进行不同的操作。
频繁的数据更改会触发不必要的GridControl更新
问题
不希望在每次数据更改时都更新GridControl,希望按需更新控件。
解决方案
不要在您的数据项类中实现INotifyPropertyChanged接口,相反调用DataControlBase.RefreshData或DataControlBase.RefreshRow方法,当您希望GridControl显示在数据源级别所做的更改时,请使用RefreshRow方法。
GridControl不更新激活单元格中的数据,即使INotifyPropertyChanged被实现
问题
一个激活单元不更新它的内容,即使当您实现INotifyPropertyChanged ,当您编辑单元格时,其激活编辑器不回处理来自底层数据项对象的PropertyChanged事件,则会中逻辑可以防止用户编辑的丢失。
解决方案
要在数据项引发PropertyChanged 事件时更新编辑器值,可以关闭并重新打开编辑器,分别使用DataViewBase.CloseEditor和DataViewBase.ShowEditor方法。