在将绑定到它的项目添加到列表后刷新DevExpress.XtraGrid
本文关键字:列表 刷新 添加 DevExpress XtraGrid 项目 绑定 | 更新日期: 2023-09-27 18:29:31
我有一个绑定到DevExpressXtraGrid的List<SomeClass>
,类似于:
MyXtraGrid.DataSource = MyList;
我有一些列是用XtraGrid设计器制作的。一切都很好,行显示在网格中,但当我向MyList添加对象时,网格不会刷新,也不会显示新项目。
我试过使用MyXtraGrid.Refresh()
,也试过重新绑定MyXtraGrid.DataSource = MyList
,但都没用。
MyXtraGrix.MyView.PopulareColumns()
不是一个选项,因为我不会在网格中显示MyList中的所有字段,这将导致我使用设计器配置的列。
如何刷新网格视图以显示我添加的对象?
只需执行以下操作:
private void BindCollection(IEnumerable collection)
{
// keep current index
GridView view = MyXtraGrid.Views[0] as GridView;
int index = 0;
int topVisibleIndex = 0;
if (view != null)
{
index = view.FocusedRowHandle;
topVisibleIndex = view.TopRowIndex;
}
MyXtraGrid.BeginUpdate();
MyXtraGrid.DataSource = collection;
MyXtraGrid.RefreshDataSource();
if (view != null)
{
view.FocusedRowHandle = index;
view.TopRowIndex = topVisibleIndex;
}
MyXtraGrid.EndUpdate();
}
您还可以获取选定的行,并在设置新的数据源后重新选择它。
还需要注意的是,您可以使用BindingList<>
来代替List
,以便让网格更新自己,而无需编写一行代码。点击此处阅读更多信息。
使用GridControl.RefreshDataSource方法,就像我在收集数据时使用的那样。Source是某个类的列表,它包含另一个类的清单,用于创建主视图详细信息。
GridControl scheduleGrid = sender as GridControl;
MyXtraGrid.DataSource = collection;
scheduleGrid.RefreshDataSource();
如果您对IList(网格外)进行更改,我相信您则必须调用RefreshDatasource方法,并且IList不进行更改通知。RefreshDataSource方法
我认为如果你想继承IBindingList所有的一切都会自己融合在一起。否则我相信RefreshDatasource应该可以工作。
参考:
使用自定义枚举器时刷新网格
如何在刷新网格数据时保持滚动位置不变_
过滤对象数据源