/// <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); }