/// <summary> /// 初始化控制器数据 /// </summary> public void Initiazle() { OrderList = BaseDataReader.GetOrderList(); OrderType = BaseDataReader.GetBaseTableData(Tables.BASE_ORDER_TYPE, ""); MedicalClass = BaseDataReader.GetBaseTableData(Tables.BASE_MEDICAL_CLASS, ""); ServiceItems = BaseDataReader.Get_Hospital_Service_Items(); DefaultUsage = BaseDataReader.GetBaseTableData(Tables.BASE_USAGEDICTION, Tables.base_usagediction.DELETE_BIT + " = 0"); }
/// <summary> /// 在网格内显示表数据 /// </summary> public void ShowDataInGrid() { DataRow[] drsConfig = tbFieldConfig.Select(Tables.base_table_config.TABLE_DB_NAME + "='" + formView.SelectedTable.BASE_TABLE_DB_NAME.ToString().Trim() + "'", Tables.base_table_config.TABINDEX + " ASC"); string[] fields = new string[drsConfig.Length]; for (int i = 0; i < drsConfig.Length; i++) { fields[i] = "rtrim(cast(" + drsConfig[i][Tables.base_table_config.FIELD_DB_NAME].ToString( ) + " as char(30))) as " + drsConfig[i][Tables.base_table_config.FIELD_DB_NAME].ToString( ); } if (fields.Length == 0) { fields = null; } DataTable tbData = BaseDataReader.GetBaseTableData(formView.SelectedTable.BASE_TABLE_DB_NAME.Trim().ToString(), fields, ""); dataGridViewEx.DataSource = tbData.DefaultView; }
/// <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 bool ConfirmFieldExists() { ////Hashtable entityFields = new Hashtable(); Hashtable tableFields = new Hashtable(); Hashtable configFields = new Hashtable(); string fieldName = ""; string message = ""; #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> exceptionfields = new List <string>(); //异常抛出方式, //如果是配置表和数据表异常,抛出CustomException异常 #region 以数据表为参照,对比配置表字段是否有差异 foreach (object obj in tableFields) { string key = ((DictionaryEntry)obj).Key.ToString(); if (configFields.Contains(key)) { //有对应的表字段 continue; } else { //无对应的表字段 exceptionfields.Add(key); //加到异常字段中 } } if (exceptionfields.Count > 0) { for (int i = 0; i < exceptionfields.Count; i++) { message += exceptionfields[i] + ","; } throw new CustomException("字段【" + message + "】不存在于配置中,请点击修复将字段添加到配置列表中以便维护"); } #endregion exceptionfields.Clear(); #region 以配置表为参照,对比数据表字段是否有差异 foreach (object obj in configFields) { string key = ((DictionaryEntry)obj).Key.ToString(); if (tableFields.Contains(key)) { //有对应的表字段 continue; } else { //无对应的表字段 exceptionfields.Add(key); //加到异常字段中 } } if (exceptionfields.Count > 0) { for (int i = 0; i < exceptionfields.Count; i++) { message += exceptionfields[i] + ","; } throw new CustomException("配置列表中的字段【" + message + "】不存在于现在的数据库环境中,可能已经过期!请点击修复以便同步配置!"); } #endregion return(true); }
private void btnCreat_Click(object sender, EventArgs e) { if (!chkPY.Checked && !chkWB.Checked) { MessageBox.Show("必须指定一个生成内容!", "", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (cboTable.Text == "" || cboName.Text == "" || cboPK.Text == "" || cboPY.Text.Trim( ) == "" || cboWb.Text.Trim( ) == "") { MessageBox.Show("字段信息选择不完整!", "", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } try { SetControlEnable(false); isProcess = true; DataTable tbData = BaseDataReader.GetBaseTableData(cboTable.Text, ""); string nameField = cboName.Text; string pyField = cboPY.Text; string wbField = cboWb.Text; pgbCount.Maximum = tbData.Rows.Count; pgbCount.Value = 1; ColumnInfo nameColumn = new ColumnInfo(); nameColumn.ColumnName = nameField; ColumnInfo keyColumn = new ColumnInfo(); keyColumn.ColumnName = cboPK.Text; keyColumn.IsNumeric = chkIsNumeric.Checked; ColumnInfo pyColumn = null; if (chkPY.Checked) { pyColumn = new ColumnInfo( ); pyColumn.ColumnName = cboPY.Text; } ColumnInfo wbColumn = null; if (chkWB.Checked) { wbColumn = new ColumnInfo( ); wbColumn.ColumnName = cboWb.Text; } for (int i = 0; i < tbData.Rows.Count; i++) { Application.DoEvents( ); lblCount.Text = tbData.Rows.Count.ToString( ) + "/" + i.ToString( ); nameColumn.DataValue = tbData.Rows[i][nameField].ToString( ).Trim( ); keyColumn.DataValue = tbData.Rows[i][keyColumn.ColumnName].ToString( ).Trim( ); string currentPy = Convert.IsDBNull(tbData.Rows[i][cboPY.Text]) ? "" : tbData.Rows[i][cboPY.Text].ToString( ).Trim( ); string currentWb = Convert.IsDBNull(tbData.Rows[i][cboWb.Text]) ? "" : tbData.Rows[i][cboWb.Text].ToString( ).Trim( ); if (currentPy != "" && currentWb != "") { pgbCount.Value = i + 1; continue; } string[] pywb = GWMHIS.BussinessLogicLayer.Classes.PublicStaticFun.GetPyWbCode(nameColumn.DataValue.ToString()); if (pyColumn != null) { if (chkEmpty.Checked && currentPy != "") { pyColumn.DataValue = null; } else { pyColumn.DataValue = pywb[0]; } } if (wbColumn != null) { if (chkEmpty.Checked && currentWb != "") { wbColumn.DataValue = null; } else { wbColumn.DataValue = pywb[1]; } } BaseDataController.UpdatePYWBField(cboTable.Text, nameColumn, keyColumn, pyColumn, wbColumn); pgbCount.Value++; } pgbCount.Value = pgbCount.Maximum; MessageBox.Show("生成完成!"); } catch (Exception err) { MessageBox.Show(err.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { isProcess = false; SetControlEnable(true); } }
/// <summary> /// 初始化控件 /// </summary> public void CreateControls() { DataRow[] drsConfig = tbFieldConfig.Select(Tables.base_table_config.TABLE_DB_NAME + "='" + formView.SelectedTable.BASE_TABLE_DB_NAME.ToString().Trim() + "'", Tables.base_table_config.TABINDEX + " ASC"); dataGridViewEx.Columns.Clear(); propertyPanel.Controls.Clear(); baseFieldConfigList = new List <FieldConfig>(); for (int i = 0; i < drsConfig.Length; i++) { FieldConfig config = new FieldConfig(); #region get config config.ALLOW_EDIT = Convert.ToInt32(drsConfig[i][Tables.base_table_config.ALLOW_EDIT]) == 1 ? true : false; config.ALLOW_EMPTY = Convert.ToInt32(drsConfig[i][Tables.base_table_config.ALLOW_EMPTY]) == 1 ? true : false; config.AUTO_INCREASE = Convert.ToInt32(drsConfig[i][Tables.base_table_config.AUTO_INCREASE]) == 1 ? true : false; config.FIELD_CN_NAME = drsConfig[i][Tables.base_table_config.FIELD_CN_NAME].ToString().Trim(); config.FIELD_DB_NAME = drsConfig[i][Tables.base_table_config.FIELD_DB_NAME].ToString().Trim(); config.FIELD_DB_TYPE = (HIS.Base_BLL.Enums.FIELD_DB_TYPE)Convert.ToInt32(drsConfig[i][Tables.base_table_config.FIELD_DB_TYPE]); config.FOREIGNER_TABLE = drsConfig[i][Tables.base_table_config.FOREIGNER_TABLE].ToString().Trim(); config.MAXLENGTH = Convert.ToInt32(drsConfig[i][Tables.base_table_config.MAXLENGTH]); config.FOREIGNER_FIELD_CN_NAME = drsConfig[i][Tables.base_table_config.FOREIGNER_FIELD_CN_NAME].ToString().Trim(); config.FOREIGNER_FIELD_DB_NAME = drsConfig[i][Tables.base_table_config.FOREIGNER_FIELD_DB_NAME].ToString().Trim(); config.FOREIGNER_FILTER_SQL = drsConfig[i][Tables.base_table_config.FOREIGNER_FILTER_SQL].ToString().Trim(); config.GRID_COL_WIDTH = Convert.ToInt32(drsConfig[i][Tables.base_table_config.GRID_COL_WIDTH]); config.HEIGHT = Convert.ToInt32(drsConfig[i][Tables.base_table_config.HEIGHT]); config.IS_FOREIGNER_KEY = Convert.ToInt32(drsConfig[i][Tables.base_table_config.IS_FOREIGNER_KEY]) == 1 ? true : false; config.IS_PRIMARY_KEY = Convert.ToInt32(drsConfig[i][Tables.base_table_config.IS_PRIMARY_KEY]) == 1 ? true : false; config.LOCATION_X = Convert.ToInt32(drsConfig[i][Tables.base_table_config.LOCATION_X]); config.LOCATION_Y = Convert.ToInt32(drsConfig[i][Tables.base_table_config.LOCATION_Y]); config.TABINDEX = Convert.ToInt32(drsConfig[i][Tables.base_table_config.TABINDEX]); config.TABLE_CN_NAME = drsConfig[i][Tables.base_table_config.TABLE_CN_NAME].ToString().Trim(); config.TABLE_DB_NAME = drsConfig[i][Tables.base_table_config.TABLE_DB_NAME].ToString().Trim(); config.UIC_TYPE = (HIS.Base_BLL.Enums.ControlType)Convert.ToInt32(drsConfig[i][Tables.base_table_config.UIC_TYPE]); config.WIDTH = Convert.ToInt32(drsConfig[i][Tables.base_table_config.WIDTH]); config.FIELD_MARK_TYPE = (HIS.Base_BLL.Enums.FIELD_MARK_TYPE)(Convert.ToInt32(drsConfig[i][Tables.base_table_config.FIELD_MARK_TYPE])); baseFieldConfigList.Add(config); #endregion DataGridViewColumn grdCol; Control ctrl = new Control(); #region 设置控件和列样式 if (config.UIC_TYPE == ControlType.CheckBox) { grdCol = new DataGridViewCheckBoxColumn(); ctrl = new CheckBox(); ((CheckBox)ctrl).Text = config.FIELD_CN_NAME; ((CheckBox)ctrl).AutoSize = true; if (config.GRID_COL_WIDTH == 0) { ((DataGridViewCheckBoxColumn)grdCol).Visible = false; } else { ((DataGridViewCheckBoxColumn)grdCol).Visible = true; } ((DataGridViewCheckBoxColumn)grdCol).Width = config.GRID_COL_WIDTH; } else if (config.UIC_TYPE == ControlType.ComboBox) { grdCol = new DataGridViewComboBoxColumn(); if (config.GRID_COL_WIDTH == 0) { ((DataGridViewComboBoxColumn)grdCol).Visible = false; } else { ((DataGridViewComboBoxColumn)grdCol).Visible = true; } ((DataGridViewComboBoxColumn)grdCol).Width = config.GRID_COL_WIDTH; ctrl = new ComboBox(); if (config.IS_FOREIGNER_KEY) { //如果是外键,设置外键的数据来源和显示字段,值字段 DataTable tb = BaseDataReader.GetBaseTableData(config.FOREIGNER_TABLE, new string[] { "rtrim(cast(" + config.FOREIGNER_FIELD_DB_NAME + " as char(30))) as " + config.FOREIGNER_FIELD_DB_NAME, config.FOREIGNER_FIELD_CN_NAME }, config.FOREIGNER_FILTER_SQL); ((DataGridViewComboBoxColumn)grdCol).DataSource = tb; ((DataGridViewComboBoxColumn)grdCol).DisplayMember = config.FOREIGNER_FIELD_CN_NAME; ((DataGridViewComboBoxColumn)grdCol).ValueMember = config.FOREIGNER_FIELD_DB_NAME; ((DataGridViewComboBoxColumn)grdCol).DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing; ((ComboBox)ctrl).DataSource = tb; ((ComboBox)ctrl).DisplayMember = config.FOREIGNER_FIELD_CN_NAME; ((ComboBox)ctrl).ValueMember = config.FOREIGNER_FIELD_DB_NAME; ((ComboBox)ctrl).DropDownStyle = ComboBoxStyle.DropDown; ((ComboBox)ctrl).MaxDropDownItems = 25; } } else { grdCol = new DataGridViewTextBoxColumn(); if (config.GRID_COL_WIDTH == 0) { ((DataGridViewTextBoxColumn)grdCol).Visible = false; } else { ((DataGridViewTextBoxColumn)grdCol).Visible = true; } ((DataGridViewTextBoxColumn)grdCol).Width = config.GRID_COL_WIDTH; ctrl = new TextBox(); ((TextBox)ctrl).MaxLength = config.MAXLENGTH; } #endregion #region 创建控件和列 //定义标签 Label lbl = new Label(); lbl.Text = config.FIELD_CN_NAME; lbl.AutoSize = true; int lblWidth = 0; int lblHeight = 0; using (System.Drawing.Graphics g = propertyPanel.CreateGraphics()) { System.Drawing.SizeF size = g.MeasureString(lbl.Text, propertyPanel.Font); lblWidth = Convert.ToInt32(size.Width); lblHeight = Convert.ToInt32(size.Height); } //定义控件 ctrl.Name = config.UIC_TYPE.ToString() + "_" + config.FIELD_DB_NAME; ctrl.Size = new System.Drawing.Size(config.WIDTH, config.HEIGHT); ctrl.Location = new System.Drawing.Point(config.LOCATION_X, config.LOCATION_Y); if (!config.ALLOW_EDIT) { ctrl.Enabled = false; } ctrl.TabIndex = config.TABINDEX; ctrl.KeyPress += new KeyPressEventHandler(ctrl_KeyPress); ctrl.Tag = config; if (config.UIC_TYPE != ControlType.CheckBox) { lbl.Left = ctrl.Left - lblWidth - 4; lbl.Top = ctrl.Top + (ctrl.Height - lblHeight); if (!config.ALLOW_EMPTY) { lbl.ForeColor = System.Drawing.Color.Red; } propertyPanel.Controls.Add(lbl); } propertyPanel.Controls.Add(ctrl); grdCol.Name = "COLUMN_" + config.FIELD_DB_NAME; grdCol.HeaderText = config.FIELD_CN_NAME; grdCol.DataPropertyName = config.FIELD_DB_NAME; dataGridViewEx.Columns.Add(grdCol); #endregion } }
/// <summary> /// /// </summary> private BaseDataRecord CreateRecordInstance() { if (formView.SelectedTable == null) { throw new Exception("没有选择数据表"); } string TableName = formView.SelectedTable.BASE_TABLE_DB_NAME.ToString().Trim(); DataTable tb = BaseDataReader.GetBaseTableData(TableName, "1 > 2"); BaseDataRecord dataRecord = new BaseDataRecord();//定义一条新记录 foreach (Control ctrl in this.propertyPanel.Controls) { if (ctrl is Label) { continue; } if (ctrl.Tag == null) { continue; } FieldConfig config = (FieldConfig)ctrl.Tag; for (int i = 0; i < tb.Columns.Count; i++) { string fieldName = tb.Columns[i].ColumnName; if (fieldName.ToUpper() == config.FIELD_DB_NAME.ToUpper()) { object objValue = null; if (config.UIC_TYPE == ControlType.CheckBox) { objValue = ((CheckBox)ctrl).Checked ? 1 : 0; } if (config.UIC_TYPE == ControlType.ComboBox) { objValue = ((ComboBox)ctrl).SelectedValue; } if (config.UIC_TYPE == ControlType.TextBox) { objValue = ((TextBox)ctrl).Text; } //如果是自增长的主键,跳过 if (config.IS_PRIMARY_KEY && config.AUTO_INCREASE && objValue.ToString().Trim() == "") { continue; } if ((config.IS_PRIMARY_KEY || !config.ALLOW_EMPTY)) { if (objValue == null || objValue.ToString() == "") { throw new Exception(config.FIELD_CN_NAME + "不能为空!"); } } objValue = Convert.ChangeType(objValue, tb.Columns[i].DataType); BaseDataRecordField field_value = new BaseDataRecordField(); field_value.FieldConfig = config; field_value.DataValue = objValue; dataRecord.RecordFields.Add(field_value); } } } return(dataRecord); }