using Microsoft.Win32; using MyList.Common; using MyList.Entity; using MyList.Model; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.Linq; using System.Threading.Tasks; using System.Windows; using System.Windows.Threading; namespace MyList.ViewModel { public class RegisterViewModel : BaseViewModel { public delegate void LoadedEventHandler(int total); public event LoadedEventHandler LoadedEvent; public RegisterViewModel(Dispatcher dispatcher) : base(dispatcher) { } public RegisterViewModel() : base() { } private db_myEntities dbContext = new db_myEntities(); private IDAL.IRegister dal = new DAL.DRegister(); protected async override void Save(object obj) { if (this.SaveData == null) { MessageBox.Show("没有数据供保存"); return; } LoadingVisibility = Visibility.Visible; int result = 0; //新增的数据 List addList = new List(); await Task.Run(() => { foreach (var v in this.SaveData) { v.UPDATE_DATE = DateTime.Now; //是否新增 bool isAdd = (v.registerID == null || v.registerID == "" || v.registerID == "0"); if (isAdd) { v.ADD_DATE = DateTime.Now; v.registerID = Guid.NewGuid().ToString("N"); addList.Add(v); } dbContext = new db_myEntities(); my_tb_register model = v.CloneProperties(); dbContext.my_tb_register.Attach(model); if (isAdd) { dbContext.Entry(model).State = System.Data.Entity.EntityState.Added; } else { dbContext.Entry(model).State = System.Data.Entity.EntityState.Modified; } } int resullt = dbContext.SaveChanges(); }); LoadingVisibility = Visibility.Collapsed; //=0 也认为成功 if (result >= 0) { MessageBox.Show("操作成功"); //清除已经保存的数据 this.SaveData = null; //向查询集合添加刚插入的数据 _dispatcher.Invoke( delegate { foreach (var v in addList) { QueryData.Insert(0, v); } }); } else { MessageBox.Show("操作失败"); } } protected async override void Delete(object obj) { if (MessageBox.Show("你真的要删除所选数据吗?", "提示", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No) { return; } IEnumerable list = this.MdataGrid.SelectedItems as IEnumerable; if (list == null) { return; } LoadingVisibility = Visibility.Visible; int result = 0; await Task.Run(() => { dbContext = new db_myEntities(); foreach (var v in list) { my_tb_register m = v.CloneProperties(); dbContext.my_tb_register.Attach(m); dbContext.Entry(m).State = System.Data.Entity.EntityState.Deleted; dbContext.my_tb_register.Remove(m); } result = dbContext.SaveChanges(); }); LoadingVisibility = Visibility.Collapsed; //=0 也认为成功 if (result >= 0) { _dispatcher.Invoke( delegate { while (list.Count() > 0) { RegisterModel m = (RegisterModel)list.ElementAt(0); QueryData.Remove(m); } //不能用foreach 否则报集合已修改的错误 //for (int i = 0; i < list.Count(); i++) //{ // RegisterModel m = (RegisterModel)list.ElementAt(i); // QueryData.Remove(m); //} }); MessageBox.Show("删除成功"); } else { MessageBox.Show("删除失败"); } } protected async override void Query(object obj) { LoadingVisibility = Visibility.Visible; await Task.Run(() => { if (QueryData == null) { QueryData = new ObservableCollection(); } else { _dispatcher.Invoke( delegate { QueryData.Clear(); }); } IEnumerable list; if (obj == null) { list = dbContext.my_tb_register.OrderByDescending(c => c.ADD_DATE).ToList(); } else { FYJ.Pager.GridPager pager = new FYJ.Pager.GridPager(); Func[] exp = null; list = dal.GetList(ref pager, exp); } if (LoadedEvent != null) { LoadedEvent(list.Count()); } foreach (var v in list) { RegisterModel m = v.CloneProperties(); _dispatcher.Invoke( delegate { QueryData.Add(m); }); } }); LoadingVisibility = Visibility.Collapsed; } protected override void Export(object obj) { IEnumerable srcList = MdataGrid.ItemsSource as IEnumerable; DataTable dt = ObjectHelper.IEnumerableToDataTable(srcList); dt.TableName = "my_tb_register"; SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filter = "Execl files (*.xls)|*.xls|XML文件(*.xml)|*.xml"; if (saveFileDialog1.ShowDialog() == true) { if (System.IO.Path.GetExtension(saveFileDialog1.FileName) == ".xml") { dt.WriteXml(saveFileDialog1.FileName, XmlWriteMode.WriteSchema); } else { //DataTableToExcel te = new DataTableToExcel(); //te.SaveExcel(dt, "", saveFileDialog1.FileName, "sheet1"); } } } } }