2017-09-05 4 views
0

私はfrmModifyServiceという名前のフォームを持っています。このフォームは、先に進むサービスの詳細を表示します。このフォームにはListViewがあります。ComboBoxからサービスIDを選択すると、そのサービスのすべてのコンポーネントがListViewにロードされます。 ListViewの名前はlvSelectedItemsです。そして、それは完全に働いています。ListViewの値を比較する方法ListViewにアイテムを読み込んだ後、アイテムを追加または削除した後にC#にアイテムを追加する

このフォームfrmModifyServiceは、サービスを編集する機会と、ListViewのサービスコンポーネント(lvSelectedItems)の詳細を提供します。 とcmdDeleteという名前のlvSelectedItemsの2つのボタンがあります。 lvSelectedItemsにアイテムを追加できます。 ListView、lvSelectedItemsから選択した項目を削除することもできます。 cmdUpdateという別のボタンがあります。このボタンを使用すると、特定のサービスIDの現在のサービスの詳細をMySQLデータベースに更新することができます。

問題:

がどのように我々は知っているがcmdUpdate_Clickイベントの実行中に何らかの変化が私たちのlvSelectedItemsで発生しているのですか?

スクリーンショット:

Click here to see my ComboBox, Buttons & ListView

答えて

0

一つの解決策は、リストビューの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を更新表示するサービスを変更します。