簡體   English   中英

DataGridView的BindingSource更新多久了?

[英]How far back does a DataGridView's BindingSource update?

當我剛開始從事這個項目時,我從未使用過任何.NET,更不用說C#或WinForms了,因此,如果我所做的任何事情使您感動不已,請告訴我最佳實踐是什么為此設置。

我正在計划系統上。 我將事件存儲在數據庫中,並將事件從Web服務獲取到主列表中,以供應用程序使用。 此Event類包含活動列表(列表):

[Global class]

public List<Event> Events = Service.GetEvents();

我有一個顯示事件的DataGridView和另一個顯示事件活動的Datagridview。 我還有一個“保存”按鈕,只有在事件以任何方式發生更改時才能啟用。 這是我的設置方法:

[EventsView form]

BindingSource eventsBindingSource = new BindingSource();
BindingSource activitiesBindingSource = new BindingSource();

List<Event> events = new List<Event>(Global.Events.ToList());

eventsBindingSource.DataSource = events;
activitiesBindingSource.DataSource = ((Event)eventsBindingSource.Current).Legs //updated when clicked on new row.

eventsDataGridView.DataSource = eventsBindingSource;
activitiesDataGridView.DataSource = activitiesBindingSource;

我進行了設置,以便當在avtivitiesDataGridView上使用CellValueChanged時,它將檢查activityBindingSource.Current,在原始Global.Events列表中查找該事件的活動,如果有所不同,它將啟用“保存”按鈕。

但是,當我檢查兩個值是否不同時(lo和觀察到的),即使BindingSource設置為事件列表(該列表的副本),Global.Events列表也已更新。

BindingSource是否具有它,以便如果列表是副本,它也會更新原始列表?

我不希望它自動更新並保存它的原因是當用戶單擊“僅保存”時我可以更新Web服務。

我也嘗試了以下方法:

  • 使(復制)事件列表成為BindingList
  • 逐一復制全局列表中的事件
  • 繞過BindingSource並將DGV的數據源設置為List

當我讓Global.Events是用於Web服務和應用程序之間傳輸的唯一目的的另一個類(因為Entity Framework將具有無法傳遞的集合)時,此方法就可以工作了,但是由於我已經將該列表更改為具有已經轉換的Event對象,它能夠自動更新該對象。

是否有一個類似於DataBindings中的UpdateMode,我可以將其設置為除非通知我否則不更新? 還是我只是錯了?

感謝您的幫助,如果您需要更多詳細信息,請告訴我。

當數據綁定到DataGridView時,DGV並不在乎事件存儲在什么內容中。無論您使用的是事件的原始(全局)列表,還是手動復制該列表,事實是事件對象在整個過程中都是相同的,因此,當用戶進行更改(通過DGV)時,原始事件將發生更改。

實現此“保存”模型的一種方法是:

  1. 從全局列表中克隆原始事件(考慮實現ICloneable )。
  2. 設置DGV的數據源以指向這些克隆的事件。
  3. 執行“保存”時,將原始事件與克隆的事件匹配(可能通過唯一標識符),然后將更改的信息復制到原始事件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM