Пример #1
0
        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);
        }
Пример #2
0
        /*********************************************************************************************************************************************************************/
        /*********** 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();
        }