2012-03-29 170 views
2

我有一個List<SomeClass>勢必DevExpressXtraGrid,如:刷新DevExpress.XtraGrid將項目添加到列表中後,奔它

MyXtraGrid.DataSource = MyList; 

我在XtraGrid中的設計師做了一些列。一切正常,行顯示在網格中,但是當我添加對象到MyList網格不刷新,並且新項目不顯示。

我試過MyXtraGrid.Refresh(),試圖用MyXtraGrid.DataSource = MyList重新綁定,但它沒有奏效。

MyXtraGrix.MyView.PopulareColumns()是不是一個選項,因爲我不會從MyList的所有字段都顯示在網格中,這將消除我已與設計師配置的列。

如何刷新網格視圖以顯示已添加的對象?

回答

8

只要做到這一點:

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來更新網格,而無需編寫一行代碼。閱讀更多here

1

使用GridControl.RefreshDataSource Method,因爲我使用的是我的收集數據源是某個類的列表,它包含另一個類的列表以創建主視圖詳細信息。

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