/// <summary>
 /// 删除配置
 /// </summary>
 public void DeleteTableConfig()
 {
     try
     {
         TableConfig config = GetEditedTableConfig();
         TableAndFieldConfig.DeleteTableConfig(config);
     }
     catch (Exception err)
     {
         throw err;
     }
 }
        /// <summary>
        /// 加载数据
        /// </summary>
        public void Initalize()
        {
            tbSystemTable = BaseDataController.GetSystemTableList();
            //加载字段配置表
            tbFieldConfig = GetVindicateTableFieldList();
            ////根据表名从DLL加载字段列表
            //string dllName = System.Windows.Forms.Application.StartupPath + "\\HIS.Entity.dll";
            //Assembly assembly = Assembly.LoadFile( dllName );
            //string typeName = "HIS.Model." + tableInfo.BASE_TABLE_DB_NAME.ToString().Trim();
            //object obj = assembly.CreateInstance( typeName, true );
            //if ( obj == null )
            //    throw new Exception( "未能从实体文件加载表对象【"+typeName + "】");
            //PropertyInfo[] properies = obj.GetType().GetProperties();
            //获取当前数据库表
            DataTable tb = BaseDataReader.GetBaseTableData(tableInfo.BASE_TABLE_DB_NAME.ToString(), "1>2");

            lstField = new List <Item>();
            bool reloadConfig = false;

            for (int i = 0; i < tb.Columns.Count; i++)
            {
                string strWhere = Tables.base_table_config.TABLE_DB_NAME + " = '" + tableInfo.BASE_TABLE_DB_NAME.ToString().Trim() + "' and "
                                  + Tables.base_table_config.FIELD_DB_NAME + " = '" + tb.Columns[i].ColumnName + "'";
                DataRow[] drsFields = tbFieldConfig.Select(strWhere);
                if (drsFields.Length == 0)
                {
                    TableAndFieldConfig.AddDefaultConfig(tableInfo, tb.Columns[i].ColumnName);
                    reloadConfig = true;
                }
            }
            if (reloadConfig)
            {
                tbFieldConfig = GetVindicateTableFieldList();
            }
            for (int i = 0; i < tbFieldConfig.Rows.Count; i++)
            {
                Item item = new Item();
                item.Text  = tbFieldConfig.Rows[i][Tables.base_table_config.FIELD_CN_NAME].ToString().Trim();
                item.Value = tbFieldConfig.Rows[i][Tables.base_table_config.FIELD_DB_NAME].ToString().Trim();
                lstField.Add(item);
            }
        }
        /// <summary>
        /// 修正配置表字段,使之与数据库、实体同步
        /// </summary>
        /// <returns></returns>
        public bool ReviseConfigFields()
        {
            bool needRevise = false;

            try
            {
                if (ConfirmFieldExists())
                {
                    needRevise = false;
                }
            }
            catch (CustomException ce)
            {
                needRevise = true;
            }
            catch (Exception err)
            {
                throw err;
            }
            //如果需要修正
            if (needRevise)
            {
                Hashtable tableFields  = new Hashtable();
                Hashtable configFields = new Hashtable();

                string fieldName = "";

                #region 获取各个部分的字段
                //当前数据库HIS表
                DataTable tb = BaseDataReader.GetBaseTableData(tableInfo.BASE_TABLE_DB_NAME.ToString(), "1>2");
                for (int i = 0; i < tb.Columns.Count; i++)
                {
                    fieldName = tb.Columns[i].ColumnName.Trim().ToUpper();
                    tableFields.Add(fieldName, fieldName);
                }

                //获取配置表中保存的字段
                for (int i = 0; i < tbFieldConfig.Rows.Count; i++)
                {
                    fieldName = tbFieldConfig.Rows[i][Tables.base_table_config.FIELD_DB_NAME].ToString().Trim().ToUpper();
                    configFields.Add(fieldName, fieldName);
                }
                #endregion

                //以当前表字段为参照。遍历配置,没有则添加,多余则删除

                List <string> fieldNotInConfig = new List <string>(); //在配置中不存在的字段 ,需添加
                List <string> fieldNotInTable  = new List <string>(); //配置表中多余的字段,引起多余的原因可能是修改了表结构,取消了一些字段,需删除

                #region 以 数据表为参照,对比配置表字段是否有差异
                foreach (object obj in tableFields)
                {
                    string key = ((DictionaryEntry)obj).Key.ToString();
                    if (configFields.Contains(key))
                    {
                        continue;//有对应的表字段
                    }
                    else
                    {
                        fieldNotInConfig.Add(key);  ////无对应的表字段,加到需要添加的列表中
                    }
                }
                foreach (object obj in configFields)
                {
                    string key = ((DictionaryEntry)obj).Key.ToString();
                    if (tableFields.Contains(key))
                    {
                        continue;//有对应的表字段
                    }
                    else
                    {
                        fieldNotInTable.Add(key);  //多余的字段,添加到待删除列表中
                    }
                }
                #endregion
                try
                {
                    //加入没有的配置字段
                    foreach (string FieldName in fieldNotInConfig)
                    {
                        TableAndFieldConfig.AddDefaultConfig(tableInfo, FieldName);
                    }

                    TableAndFieldConfig.DeleteFieldConfig(tableInfo, fieldNotInTable);
                    return(true);
                }
                catch (Exception err)
                {
                    (new ErrorController()).LogEvent(err.Message + "\r\n" + err.Source);
                    throw new Exception("修正配置表信息发生错误!");
                }
            }
            else
            {
                return(true);
            }
        }
        /// <summary>
        /// 更新配置
        /// </summary>
        public void UpdateConfig()
        {
            List <FieldConfig> configs = GetFieldConfigs();

            TableAndFieldConfig.UpdateFieldConfig(configs);
        }