// super class for all wrapper class public abstract class ModelBase : IComparable, INotifyPropertyChanged { public bool neu = true; public bool modify = false; public virtual bool isFilter(String filter) { return true; } public abstract int CompareTo(object obj); public void NotifyPropertyChanged(string name) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(name)); } } public event PropertyChangedEventHandler PropertyChanged; } public class ModelDept : ModelBase { private String kurzBez; private String bez; private long pindex; public ModelDept():this(-1,"","") { } public ModelDept(long pindex, String kurzBez, String bez) { PIndex = pindex; KurzBez = kurzBez; Bez = bez; } public String getKurzBezQuote() { return "'" + kurzBez + "'"; } public String getBezQuote() { return "'" + bez + "'"; } public String KurzBez { get { return kurzBez; } set { if (value != kurzBez) { NotifyPropertyChanged("KurzBez"); modify = true; kurzBez = value; System.Diagnostics.Debug.WriteLine("Change KurzBez: " + kurzBez); } } } public String Bez { get { return bez; } set { if (value != bez) { NotifyPropertyChanged("Bez"); modify = true; bez = value; System.Diagnostics.Debug.WriteLine("Change Bez: " + bez); } } } public long PIndex { get { return pindex; } set { if (value != pindex) { NotifyPropertyChanged("PIndex"); modify = true; pindex = value; } } } public override String ToString() { return kurzBez + " " + bez; } } // wrapper class for the tow ObservableCollection public class ObservableCollection_dept { private ObservableCollection items = new ObservableCollection(); private ObservableCollection deleteItems = new ObservableCollection(); public int getDeleteItemsCount() { return deleteItems.Count; } public ObservableCollection Items { get { return items; } } // public String filter = ""; public ObservableCollection_dept() { // CollectionChanged += this.OnCollectionChanged; } public void Delete(ModelDept item) { items.Remove((ModelDept)item); deleteItems.Add(item); } public void save2Database() { Dbs dbs = Dbs.getDbsInstance(); String sql; // first delete foreach (ModelDept dept in deleteItems) { sql = "DELETE FROM depteilung WHERE pindex=" + dept.PIndex + ";"; dbs.changeDBS(sql); } foreach (ModelDept dept in items) { if (dept.neu) { sql = "INSERT INTO dept(pindex, kurzbez, bez) "+ "Values ("+dept.PIndex+", "+dept.getKurzBezQuote()+", "+dept.getBezQuote()+");"; dbs.changeDBS(sql); } else { if (dept.modify) { sql= "UPDATE dept "+ " SET kurzbez="+dept.getKurzBezQuote()+", bez="+dept.getBezQuote()+" "+ " WHERE pindex="+dept.PIndex+";"; dbs.changeDBS(sql); } } } } } // convert method dataTable to wrapper class public static ObservableCollection_dept getItemsFromDept() { ObservableCollection_Dept Dept_class = new ObservableCollection_Dept(); ObservableCollection deptitems = dept_class.Items; String sql = SQL_getdepteilungen(); Dbs dbs = Dbs.getDbsInstance(); DataTable dt = dbs.selectDBS(sql); ModelDept dept=null; foreach (System.Data.DataRow row in dt.Rows) { dept = new ModelDept(); dept.PIndex = (int)row.ItemArray[0]; dept.KurzBez = (String)row.ItemArray[1]; dept.Bez = (String)row.ItemArray[2]; dept.neu = false; // important dept.modify = false; // important deptitems.Add(dept); } return dept_class; } // ObservableCollection_dept