机房重构(C#)--模板方法(学生基本信息服务)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aimin_com/article/details/82822664

首先小编开始给大家介绍一下
模板方法是将所有的逻辑以及一致的东西放到了模板中,其他不同的一些数据和一些控件的使用情况需要在自己窗体中重写。

模板界面
设置界面的所有控件的Modifiers为public,方便其他窗体修改(以下代码是所有父窗体需要写的,其中自己添加退出界面和导出表格)
在这里插入图片描述

1. 定义两个虚方法:

    //定义两个虚方法
        public virtual string ToEnglish(string cbo) { return ""; }//将汉字转换成数据库识别的形式
        public virtual string GetdbName() { return ""; } //获取数据库的名字的虚方法,在子窗体中重写

2. 初始加载:


        #region 初始加载:大于小于等、与或、控件不可用等

        private void WorkRecord_Load(object sender, EventArgs e)
        {
            #region 初始加载符号和与或 注释原因:在Designer中存在值           
            ////初始加载信息
            //string[] Operator = { ">", "<", "=", "<>" };
            //string[] Relation = { "与", "或" };
            //cmbOperator1.Items.AddRange(Operator);
            //cmbOperator2.Items.AddRange(Operator);
            //cmbOperator3.Items.AddRange(Operator);
            //cmbRelations1.Items.AddRange(Relation);
            //cmbRelations2.Items.AddRange(Relation);
            #endregion

            //时间控件不能用、不可见
            dateTP1.Enabled = false;
            dateTP1.Visible = false;
            dateTP2.Visible = false;
            dateTP2.Enabled = false;
            dateTP3.Visible = false;
            dateTP3.Enabled = false;


            //加载的时候,只有第一行控件可用,后两行控件不可用
            cmbFeild2.Enabled = false;
            cmbFeild3.Enabled = false;
            cmbOperator2.Enabled = false;
            cmbOperator3.Enabled = false;
            cmbRelations1.Enabled = false;
            cmbRelations2.Enabled = false;
            txt2.Enabled = false;
            txt3.Enabled = false;            
        }
        #endregion 

3. 查询信息:先判空,再实例化

 #region  清空: 清空+二三行控件不可用 并且返回到初始状态

        private void btnDelete_Click(object sender, EventArgs e)
        {

            
            //所有的内容都为质空
            cmbRelations1.Text = "";
            cmbRelations2.Text = "";
            DateGV.DataSource = "";
            foreach (Control  Empty in pnlSelectwork.Controls)
            {
                if (Empty is ComboBox||Empty is TextBox||Empty is DateTimePicker)
                {
                    Empty.Text = "";
                }
            }

            //时间控件不能用、不可见
            dateTP1.Enabled = false;
            dateTP1.Visible = false;
            dateTP2.Visible = false;
            dateTP2.Enabled = false;
            dateTP3.Visible = false;
            dateTP3.Enabled = false;

            //加载的时候,只有第一行控件可用,后两行控件不可用
            cmbFeild2.Enabled = false;
            cmbFeild3.Enabled = false;
            cmbOperator2.Enabled = false;
            cmbOperator3.Enabled = false;
            cmbRelations1.Enabled = false;
            cmbRelations2.Enabled = false;
            txt2.Enabled = false;
            txt3.Enabled = false;
        }

        #endregion

4. 查询信息:

 #region  查询信息
       
        private void btnInquire_Click(object sender, EventArgs e)
        {
            //每次点击按钮前先清空dateGV的内容
            DateGV.DataSource = null;


            #region 判空:所有在pnl控件上的都为true空时弹出框提示,与或不在里面

            foreach (Control Empty in pnlSelectwork.Controls)
            {
                if ((Empty is ComboBox||Empty is TextBox) && Empty.Enabled==true)
                {
                    if (Empty.Text.Trim()=="")
                    {
                        MessageBox.Show("请将您的信息填写完整!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return;
                    }
                }
            }
                    

            #endregion 判空


            #region 实例化外观和实体,如果有值则显示出来,没有则弹框

            //实例化实体和外观
            Entity.WorkLog worklog = new Entity.WorkLog();
            Facade.WorkLogFacade Fwork = new Facade.WorkLogFacade();


            //给实体赋值
            worklog.DbtableName = GetdbName();

            worklog.cboField1 =ToEnglish(cmbFeild1.Text.Trim());
            worklog.cboField2 =ToEnglish(cmbFeild2.Text.Trim());
            worklog.cboField3 =ToEnglish(cmbFeild3.Text.Trim());

            worklog.cboMark1 = cmbOperator1.Text.Trim();
            worklog.cboMark2 = cmbOperator2.Text.Trim();
            worklog.cboMark3 = cmbOperator3.Text.Trim();

            if (txt1.Enabled==true)
            {
                worklog.Content1 = txt1.Text.Trim();
                worklog.Content2 = txt2.Text.Trim();
                worklog.Content3 = txt3.Text.Trim();
            }
            else
            {
                worklog.Content1 = dateTP1.Text.Trim();
                worklog.Content2 = dateTP2.Text.Trim();
                worklog.Content3 = dateTP3.Text.Trim();                              
            }
            
            


            worklog.Relationship1 =ToEnglish(cmbRelations1.Text.Trim());
            worklog.Relationship2 =ToEnglish(cmbRelations2.Text.Trim());

            //调用外观进行判断是否存在
            DataTable reuslt = Fwork.FacadeGroupFindtemplate(worklog);
            if (reuslt.Rows.Count>0)
            {
                MessageBox.Show("查找成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                DateGV.DataSource = reuslt;     //将查找的DataTable类型的值给控件显示
                DateGV.AllowUserToAddRows = false; //为了最后一行不为空白。
                
                return;
            }
            else
            {
                MessageBox.Show("不存在您所查找的信息");

                return;
            }

            #endregion  实例化

        }

        #endregion 查询

5. 判断Relation下拉框与或情况以及第一行、第二行全部填写后下拉框激活

 #region 判断 Relation下拉框 与、或出现后其他控件的显示情况

        /// <summary>
        /// 第一个:选择 或、且 时候,显示第二行的控件为可用
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cmbRelations1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmbRelations1.Text.Trim()=="与"||cmbRelations1.Text.Trim()=="或")
            {
                 cmbFeild2.Enabled = true;
                 cmbOperator2.Enabled = true;
                 txt2.Enabled = true;
            }

           
            
        }

        
        /// <summary>
        /// 选择或 或者 且 时候,显示第三行的控件为可用
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void cmbRelations2_SelectedIndexChanged(object sender, EventArgs e)
        {

            if (cmbRelations2.Text.Trim() == "与" || cmbRelations2.Text.Trim() == "或")
            {
                cmbFeild3.Enabled = true;
                cmbOperator3.Enabled = true;
                txt3.Enabled = true;
            }
          
        }

            #endregion 判断


        #region 第一行、第二行全部填写后下拉框激活

        /// <summary>
        /// 当第一行内容全部填写完毕,此时关系下拉框被激活
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txt1_TextChanged(object sender, EventArgs e)
        {
            if (cmbFeild1.Text != "" && cmbOperator1.Text != "" && txt1.Text != "")
            {
                cmbRelations1.Enabled = true;
            }



        }

        /// <summary>
        /// 当填满第二行内容时候,第二个关系下拉框激活
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txt2_TextChanged(object sender, EventArgs e)
        {
            if (cmbFeild2.Text != "" && cmbOperator2.Text != "" && txt2.Text != "")
            {
                cmbRelations2.Enabled = true;
            }
        }

        #endregion 前两行下拉框激活

6. 先构造一个没有返回虚方法,在根据file中内容添加cmboperator的符号


        /// <summary>
        /// 构造一个没有任何返回值的虚方法,来根据cmbFeild的内容,出现符号下拉框的下拉内容!
        /// </summary>
        /// <param name="file"></param>
        /// <param name="mark"></param>
        public virtual void addcontent(ComboBox file, ComboBox mark) { }

        #region 以下三个方法根据file中的内容添加cmbOperator中的符号

        private void cmbFeild1_SelectedIndexChanged(object sender, EventArgs e)
        {
            addcontent(cmbFeild1, cmbOperator1);
            

            if (cmbFeild1.Text == "上班时间" || cmbFeild1.Text == "下班时间")
            {
                dateTP1.Format = DateTimePickerFormat.Custom;
                
                dateTP1.Visible = true;
                dateTP1.Enabled = true;
               
                txt1.Visible = false;
                txt1.Enabled = false;
                dateTP1.CustomFormat = "yyyy-MM-dd";
                


            }
            else
            {
                
                dateTP1.Visible = false;
                dateTP1.Enabled = false;

                txt1.Visible = true;
                txt1.Enabled = true;
                return;
            }
      

        }

        private void cmbFeild2_SelectedIndexChanged(object sender, EventArgs e)
        {
            addcontent(cmbFeild2, cmbOperator2);
            

            if (cmbFeild2.Text == "上班时间" || cmbFeild2.Text == "下班时间")
            {
                dateTP2.Format = DateTimePickerFormat.Custom;
                dateTP2.Visible = true;
                dateTP2.Enabled = true;
                txt2.Visible = false;
                txt2.Enabled = false;
               

            }
            else
            {

                dateTP2.Visible = false;
                dateTP2.Enabled = false;

                txt2.Visible = true;
                txt2.Enabled = true;
                return;

            }
        }

        private void cmbFeild3_SelectedIndexChanged(object sender, EventArgs e)
        {
            addcontent(cmbFeild3, cmbOperator3);
            

            if (cmbFeild3.Text == "上班时间" || cmbFeild3.Text == "下班时间")
            {
                dateTP3.Format = DateTimePickerFormat.Custom;
                dateTP3.Visible = true;
                dateTP3.Enabled = true;
                txt3.Visible = false;
                txt3.Enabled = false;

            }
            else
            {

                dateTP3.Visible = false;
                dateTP3.Enabled = false;

                txt3.Visible = true;
                txt3.Enabled = true;
                return;

            }
        }
        #endregion

7. 设置DataGridView,双击显示给修改窗体进行修改学生:

 /// <summary>
        /// 修改窗体中需要:双击显示传给修改窗体
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void DateGV_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
           
            //如果表里有值
            if (e.RowIndex>-1)
            {

                Opert.frmModifysinfo frmM = new Opert.frmModifysinfo();
                frmM.Row = this.DateGV.Rows[e.RowIndex]; //将查询的值传给修改窗体。
                frmM.Show();

            }


        }

*8. 设置修改信息:*是修改界面的

   /// <summary>
        /// 修改信息
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnUpdate_Click(object sender, EventArgs e)
        {
            //判断是否选中
            if (DateGV.SelectedRows.Count == 0)
            {
                MessageBox.Show("请选中一行");
                return;
            }
            else
            {
                Opert.frmModifysinfo frmM = new Opert.frmModifysinfo();
                frmM.Row = DateGV.CurrentRow; //将查询的值传给修改窗体。
                frmM.Show();

                //this.txtSpecialty.Text = Row.Cells[5].Value.ToString();
            }

        }

接下来请大家参考我的子窗体模块:学生基本信息服务

由于其他层的传值没有写,请见谅(可自行书写DataTable或Boolean类型的需求转换即可),存储结构在下一篇介绍,请望大家提出宝贵意见。

猜你喜欢

转载自blog.csdn.net/aimin_com/article/details/82822664
今日推荐