2012-03-16 57 views
6

後XtraGrid中未刷新I有一個Windows窗體上的XtraGrid中控制,綁定到設置對象如下:更新其數據源

clientListBindingSource.DataSource = ObjectContext.Clients; 

凡ObjectContext的是一個正常的EF上下文。要編輯的客戶,我通過選定行的Client對象到我的編輯形式,並得到如下更改保存:

var rows = mainView.GetSelectedRows(); 
var editClient = ((Client)mainView.GetRow(rows[0])); 
var editForm = new ClientDetailForm 
        { 
         EditClient = editClient 
        }; 
var result = editForm.ShowDialog(); 
if (result == DialogResult.OK) 
{ 
    ObjectContext.SaveChanges(SaveOptions.AcceptAllChangesAfterSave); 
    clientGrid.RefreshDataSource(); 
} 

變化我在修改的形式堅持到數據庫,但我已經嘗試過的幾種方法試圖讓網格更新,它固執地拒絕,直到我重新啓動應用程序。我究竟做錯了什麼?

回答

6

嘗試做這樣的更改後您的數據源復位:

yourGrid.DataSource = null; // you might not need this, but it's my practice 
yourGrid.DataSource = data_source; 
+3

這樣的作品,感謝,但它是一個有點腦死亡對我來說,沒有別的,包括' RefreshDataSource'方法,工作。使用ED數據源DevExpress控件似乎滯後一些。 – ProfK 2012-03-16 08:43:34

+0

在我看來,gridview沒有別的,只是顯示數據。程序員應該告訴它數據源已經改變,以便它可以重新顯示數據。我不知道DevExpress是否有這個功能,或者我們應該手動完成。 – jaselg 2012-03-16 11:46:35

2

我發現,

Grid.RefreshDataSource(); 

預期,如果你是通過代碼,像這樣結合的數據源作品的呼叫:

IndicationSummaryGrid.DataBindings.Add("DataSource", Presenter, "SummaryDetailList", true, DataSourceUpdateMode.OnPropertyChanged); 

其中「DataSource」是要綁定的網格屬性,Presenter是對象b ound和SummaryDetailList是屬於Presenter的對象列表。

+0

在我們的一個項目中這是行不通的(它是一個帶有子列的網格,AddRemove通常工作,除非 - 用戶點擊某種東西進行排序 - 之後gridview不再進行更新...) – Offler 2014-01-29 12:18:31

0

我建議你試試這個

clientListBindingSource.ResetBindings(False); 

它應該,從而刷新綁定源刷新電網