我有一个List<SomeClass>
绑定到DevExpressXtraGrid,如:
MyXtraGrid.DataSource = MyList;
我在XtraGrid设计器中创建了一些列。一切正常,行显示在网格中,但是当我向MyList添加对象时,网格没有刷新,并且没有显示新项目。
我已尝试使用MyXtraGrid.Refresh()
,尝试使用MyXtraGrid.DataSource = MyList
重新绑定,但它无法正常工作。
MyXtraGrix.MyView.PopulareColumns()
不是一个选项,因为我不希望MyList中的所有字段都显示在网格中,这将使我用设计器配置的列变得很糟糕。
如何刷新网格视图以显示我添加的对象?
答案 0 :(得分:9)
只需这样做:
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();
}
您还可以获取所选行,并在设置新数据源后重新选择它。
另请注意,您可以使用List
代替BindingList<>
,以便让网格自行更新,而无需编写单行代码。阅读更多here。
答案 1 :(得分:1)
使用GridControl.RefreshDataSource Method,因为我正在使用我的收集数据Source是某个类的List,它包含另一个类的列表,用于创建主视图详细信息。
GridControl scheduleGrid = sender as GridControl;
MyXtraGrid.DataSource = collection;
scheduleGrid.RefreshDataSource();
如果您对IList(网格外)进行更改,我相信您 然后必须调用RefreshDatasource方法和IList 不做更改通知。 RefreshDataSource Method
我相信如果你愿意,你应该继承IBindingList 这一切都要自己融合在一起。否则我相信 RefreshDatasource应该可以工作。
参考:
Refreshing Grid When Using Custom Enumerator
How to keep unchanged scroll position when refreshing grid data_
Filtering the Object DataSource