Exemplo n.º 1
0
 /// <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);
        }
Exemplo n.º 6
0
        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);
        }