2017-09-05 109 views
0

我有一個表格,名稱爲frmModifyService。此表格將顯示更早進行的服務詳情。在這個表單中有一個ListView,如果我將從ComboBox中選擇一個Service ID,則該服務的所有使用的組件將加載到ListView中。 ListView被命名爲lvSelectedItems。這是完美的。如何比較ListView後加載到ListView和添加或刪除項目後的ListView的值C#?

此表格frmModifyService將爲我們提供編輯服務的機會及其詳細信息,包括ListView中的服務組件,lvSelectedItems。除了名稱爲cmdAddcmdDeletelvSelectedItems之外,還有兩個按鈕。我們可以在lvSelectedItems中添加更多商品。而且我們也可以從ListView中刪除選定的項目,lvSelectedItems。還有一個名爲cmdUpdate的Button。此按鈕可幫助我們將特定服務ID的當前服務詳細信息更新到我的MySQL數據庫中。

問題:

我們怎麼知道是有發生在我們lvSelectedItems在執行cmdUpdate_Click事件的任何變化?

截圖:

Click here to see my ComboBox, Buttons & ListView

回答

0

一個解決方案是使用一個ListView的DataGridView instead並創建自己的類型,從​​派生。讓這個新類型訂閱它自己的OnListChanged event並設置屬性IsChanged。

例如:

public class ChangeDetectingBindingList<T> : BindingList<T> 
{ 
    public ChangeDetectingBindingList(IEnumerable<T> intialList) 
    { 
     foreach (var item in intialList) 
     { 
      base.Add(item); 
     } 
     this.ListChanged += new ListChangedEventHandler(this.OnChangedHandler); 
     this.IsChanged = false; 
    } 

    public bool IsChanged 
    { 
     get; set; 
    } 

    private void OnChangedHandler(object sender, ListChangedEventArgs e) 
    { 
     var obj = (ChangeDetectingBindingList<T>)sender; 
     obj.IsChanged = true; 
    } 
} 

當改變服務視圖中創建一個新的BindingList,在一個新的BindingSource實例紙包起來,然後用這個新的BindingSource更新DataGridView.DataSource。