public static IList <T> ConvertToModel(DataTable dt) { FieldMatching <T> fm = FieldMatching <T> .Create(); IList <T> ts = new List <T>(); // 定义集合 Type type = typeof(T); // 获得此模型的类型 PropertyInfo[] propertys = type.GetProperties(); //t.GetType().GetProperties();// 获得此模型的公共属性 foreach (DataRow dr in dt.Rows) { T t = new T(); foreach (PropertyInfo pi in propertys) { var fm_item = fm.GetItemByProperty(pi.Name); if (fm_item != null && dt.Columns.Contains(fm_item.FieldName)) { if (pi.CanWrite) { object val = dr[fm_item.FieldName]; //if (fm_item.FieldName.Equals("pri_sign_date")) // Console.WriteLine(val.ToString()); if (val != null && val != DBNull.Value) { pi.SetValue(t, val, null); } } } } ts.Add(t); } return(ts); }
/*********************************************************************************************************************************************************************/ /*********** MAIN *************/ /*********************************************************************************************************************************************************************/ public void LoadFromImport(string content) { string[] splitted = content.Split(new[] { Environment.NewLine }, StringSplitOptions.None); int nbrForInsertion = splitted.Length >= 400 ? splitted.Length >= 5000 ? splitted.Length / 25 : splitted.Length / 10 : 50; int i = 0; List <string> allFields = new List <string>(); Dictionary <int, bool> fieldsVisiblity = new Dictionary <int, bool>(); bool cancel = false; foreach (string s in splitted) { if (s.Equals(string.Empty)) { continue; } //Fields if (i == 0) { //1 Recupérer tous les champs dans la DB //2 Ouvrir fenetre FieldMatching(list field_import, list field_db) ObservableCollection <FieldSet> fieldsDB = this._dbEntities.GetAllFields(); ObservableCollection <FieldSet> fieldsImport = new ObservableCollection <FieldSet>(); foreach (string field2 in s.Split(',')) { FieldSet f = new FieldSet(); f.Name = field2.Trim(); fieldsImport.Add(f); } Application.Current.Dispatcher.Invoke((Action) delegate { FieldMatching fm = new FieldMatching(fieldsDB, fieldsImport); fm.CreateMessages(); Nullable <Boolean> waiting = fm.ShowDialog(); if (waiting == true) { //DO CHANGES this.FieldToShow = fm.FieldsToShow; this._dbEntities.FieldsToShow = fm.FieldsToShow; Dictionary <string, string> myDico = fm.FieldsAccepted; int j = 0; foreach (KeyValuePair <string, string> kk in myDico) { allFields.Add(kk.Value); fieldsVisiblity.Add(j++, this._dbEntities.FieldsToShow.Contains(kk.Value)); if (kk.Key.Equals(kk.Value)) { //INSERT IN TABLE FIELD this._dbEntities.InsertNewField(kk.Value); } } } else { cancel = true; } }); if (cancel) { return; } } //Data else { int l = 0; foreach (string fi in allFields) { this._dbEntities.UpdateEventField(fi, fieldsVisiblity.ElementAt(l).Value); l++; } if (this._dbEntities.CheckIfAlreadyExists(allFields, this.FieldToShow, s)) { continue; } int j = 0; foreach (string data in s.Split(',')) { this._dbEntities.InsertNewUser(j, allFields.ElementAt(j), data, fieldsVisiblity.ElementAt(j).Value); j++; } } //After every n insertions, save changes in DB (performance) if (i != 0 && i % nbrForInsertion == 0) { this._dbEntities.SaveAllChanges(); } i++; } //Save Changes in DB this._dbEntities.SaveAllChanges(); this._mainFields = this._dbEntities.GetAllUsers(); this._allUsers = this._mainFields; OnPropertyChanged("MainFields"); //Clear this._dbEntities.Clear(); }