2011-06-10 67 views
0

在我的應用程序中,我有一個DataGridView綁定到BindingList,對象繼承INotifyPropertyChanged通知更改,相同的線程。DataGridView不會刷新收藏修改

問題是,DataGridView不刷新UI,在選擇行更新行中的值,所以我試圖在最後使用DataGridView.Refresh(),現在工作的值都在DataGridView UI。

但實際的過程是長時間運行,它從網上下載,所以我需要顯示值,因爲他們更新。

請推薦。

public class Proxy : INotifyPropertyChanged 
    { 
     public string IPAddress 
     { 
      get 
      { 
       return ipaddress; 
      } 
      set 
      { 
       ipaddress = value; 
       OnPropertyChanged("IPAddress"); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 
     protected void OnPropertyChanged(string name) 
     { 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if (handler != null) 
      { 
       handler(this, new PropertyChangedEventArgs(name)); 
      } 
     } 
} 

SortableSearchableList<Proxy> proxyList = new SortableSearchableList<Proxy>(); 
proxydatagrid.DataSource = proxyList; 

我想更新DATAGRIDVIEW,因爲集合被修改,而不是更新。

+0

能否請您展示一些代碼 - 尤其是你如何實現INotifyPropertyChanged的,你是如何加入的項目,以你的綁定列表,並設置DataSource屬性。 – 2011-06-10 11:26:28

+0

這對我來說很完美,我的代碼唯一的區別是我使用普通的BindingList 你可以用你的代碼只用標準的BindingList 來檢查你的實現中沒有問題SortableSearchableList 2011-06-10 11:39:03

+0

另外一個想到 - 當你說你有一個漫長的過程,這是在一個後臺工作?您需要小心,使用類似ReportProgress方法的方式在正確的線程上運行。 – 2011-06-10 11:44:09

回答

0

你應該逐行更新一行。

您需要啓動一個線程,告訴您的應用程序要更新哪一行。如果做得好,每一行都應該逐一更新。

另一種選擇是將結果存儲在其他數據表或數據集中,並在完成操作時將數據表的數據表替換爲新數據表。

0

我想你想打電話DataGrid.Items.Refresh()刷新項目,而不是DataGridView.Refresh()