【C#重构】组合查询

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

查询学生信息为例:

在这里插入图片描述

父窗体部分:

在这里插入图片描述

 #region 虚方法
        //将查询的内容转换成数据库中的列名称
        public virtual string ToName(string combo)
        {
            return "";
        }

        //获得数据库名称
        protected virtual string Getdbtable()
        {
            return "";
        }
        //显示数据
        protected virtual void ToDgv(enGroupFind enGroupFind)
        {

        }
 #endregion
 #region 窗体登录初始化,控件Enable性质Comb控件Items公共内容添加
        private void frmTFather_Load(object sender, EventArgs e)
        {
            DTP1.Visible = false;

            CmbName2.Enabled = false;
            CmbOper2.Enabled = false;
            CmbRelation2.Enabled = false;
            txtContext2.Enabled = false;

            CmbName3.Enabled = false;
            CmbOper3.Enabled = false;
            txtContext3.Enabled = false;

            CmbOper1.Items.Add(">");
            CmbOper1.Items.Add("<");
            CmbOper1.Items.Add("=");

            CmbOper2.Items.Add(">");
            CmbOper2.Items.Add("<");
            CmbOper2.Items.Add("=");

            CmbOper3.Items.Add(">");
            CmbOper3.Items.Add("<");
            CmbOper3.Items.Add("=");

            CmbRelation1.Items.Add("与");
            CmbRelation1.Items.Add("或");
            CmbRelation1.Items.Add("非");
            CmbRelation2.Items.Add("与");
            CmbRelation2.Items.Add("或");
            CmbRelation2.Items.Add("非");

        }
 #endregion
 #region 点击查询后判空,以及给输入内容赋值
        private void btnSearch_Click(object sender, EventArgs e)
        {
            //判空
            if (CmbRelation1.Text == "")
            {
                if (CmbName1.Text == "" || CmbOper1.Text == "" || txtContext1.Text == "")
                {
                    MessageBox.Show("第一行查询条件为空,请添加条件");
                }
            }
            if (CmbRelation1.Text != "")
            {
                if (CmbName1.Text == "" || CmbOper1.Text == "" || txtContext1.Text == "" || CmbName2.Text == "" || CmbOper2.Text == "" || txtContext2.Text == "")
                {
                    MessageBox.Show("输入的查询条件为空,请添加条件");
                }
            }
            if (CmbRelation2.Text != "")
            {
                if (CmbName1.Text == "" || CmbOper1.Text == "" || txtContext1.Text == "" || CmbName2.Text == "" || CmbOper2.Text == "" || txtContext2.Text == "" || CmbName3.Text == "" || CmbOper3.Text == "" || txtContext3.Text == "")
                {
                    MessageBox.Show("输入的查询条件为空,请添加条件");
                }
            }

            //实例化实体层
            enGroupFind enGroupFind = new enGroupFind();

            //把控件的值通过虚方法ToName传递给实体层参数
            enGroupFind.CmbName1 = ToName(CmbName1.Text.Trim ());
            enGroupFind.CmbName2 = ToName(CmbName2.Text.Trim());
            enGroupFind.CmbName3 = ToName(CmbName3.Text.Trim());

            enGroupFind.Cmboper1 = CmbOper1.Text.Trim();
            enGroupFind.Cmboper2 = CmbOper2.Text.Trim();
            enGroupFind.Cmboper3 = CmbOper3.Text.Trim();

            enGroupFind.Cmbrelation1 = ToName(CmbRelation1.Text.Trim());
            enGroupFind.Cmbrelation2 = ToName(CmbRelation2.Text.Trim());

            //txtContext1.Text=DTP1.Text.Trim();
            enGroupFind.Txtcontext1 = txtContext1.Text.Trim();
            enGroupFind.Txtcontext2 = txtContext2.Text.Trim();
            enGroupFind.Txtcontext3 = txtContext3.Text.Trim();

            
            //实体层的GetDataTable 变量是存数据库名字的地方
            //虚方法Getdbtable把在子窗体中查到的内容赋值给它
            enGroupFind.GetDataTable = Getdbtable();

            //虚方法ToDgv,只实现了实现这个方法的传递
            //他实现给在子类中传值,在子类中返回表显示出来
            ToDgv(enGroupFind);
        }
 #endregion
#region comb控件状态改变时候日期控件显示
        /// <summary>
        /// 第一个选择框状态改变时
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CmbName1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (CmbName1.Text == "注册日期" || CmbName1.Text == "上机日期" || CmbName1.Text == "上机时间" || CmbName1.Text == "下机日期" || CmbName1.Text == "下机时间")
            {
                txtContext1.Visible = false;
                DTP1.Visible = true;
                txtContext1.Text = DTP1.Value.ToString();
            }
        }
        /// <summary>
        /// 第二个选择框状态改变时
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CmbName2_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (CmbName2.Text == "注册日期"||CmbName2.Text == "上机日期" || CmbName2.Text == "上机时间" || CmbName2.Text == "下机日期" || CmbName1.Text == "下机时间")
            {
                txtContext2.Visible = false;
                DTP2.Visible = true;
                txtContext2.Text = DTP2.Value.ToString();
            }
        }
        /// <summary>
        /// 第三个选择框状态改变时
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CmbName3_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (CmbName3.Text == "注册日期"||CmbName3.Text == "上机日期" || CmbName3.Text == "上机时间" || CmbName3.Text == "下机日期" || CmbName3.Text == "下机时间")
            {
                txtContext3.Visible = false;
                txtContext3.Text = DTP3.Value.ToString();
                DTP3.Visible = true;
            }
        }
 #endregion
 #region 如果选择组合关系后,控件Enable情况
        private void CmbRelation1_SelectedIndexChanged(object sender, EventArgs e)
        {
            CmbName2.Enabled = true;
            CmbOper2.Enabled = true;
            CmbRelation2.Enabled = true;
            txtContext2.Enabled = true;

            CmbName3.Enabled = true;
            CmbOper3.Enabled = true;
            txtContext3.Enabled = true;
        }

        private void CmbOper1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
#endregion
#region 触发日期框的时候,把更改的日期传值给实体参数
        private void DTP1_ValueChanged(object sender, EventArgs e)
        {
            txtContext1.Text = DTP1.Value.ToString();
        }

        private void DTP2_ValueChanged(object sender, EventArgs e)
        {
            txtContext2.Text = DTP2.Value.ToString();
        }

        private void DTP3_ValueChanged(object sender, EventArgs e)
        {
            txtContext3.Text = DTP3.Value.ToString();
        }
 #endregion
 #region 重置信息,删除信息
        private void btnClear_Click(object sender, EventArgs e)
        {
            foreach (Control item in this.groupBox1 .Controls)
            {
                if (item is TextBox || item is ComboBox)
                {
                    item.Text = "";
                }
            }
            DTP1.Hide();
            DTP2.Hide();
            DTP3.Hide();
            txtContext1.Show();
            txtContext2.Show();
            txtContext3.Show();
        }
 #endregion
 #region 导出Excel操作
        private void btnExportExcel_Click(object sender, EventArgs e)
        {
                //string name = "";
                //ExcelOut ex = new ExcelOut();
                //ex.RExcel(name, dgvCollect);
        }
#endregion

子窗体部分:

在这里插入图片描述

 #region 虚方法重写
        /// <summary>
        /// 重写虚方法:将查询的内容转换成数据库中的列名称
        /// </summary>
        /// <param name="combo"></param>
        /// <returns></returns>
        public override string ToName(string combo)
        {
            switch (combo)
            {
                case "卡号":
                    return "userID";
                case "学号":
                    return "studentID";
                case "注册日期":
                    return "date";
                case "与":
                    return "and";
                case "或":
                    return "or";
                case "非":
                    return "not";
                //如果用到了ToName方法但是没有输入值则返回空
                default:
                    return "";
            }
        }
        /// <summary>
        /// 重写虚方法:获得数据库名称
        /// </summary>
        /// <returns></returns>
        protected override string Getdbtable()
        {
            return "student_info";
        }
        /// <summary>
        /// 重写虚方法:显示数据
        /// </summary>
        /// <param name="enGroupFind"></param>
        protected override void ToDgv(enGroupFind enGroupFind)
        {

            //传值到外观层
            Facade.enGroupFindFacade grouFind = new Facade.enGroupFindFacade();
            DataTable result = new DataTable();
            result = grouFind.GroupCheck(enGroupFind);

            if (result .Rows.Count == 0)
            {
                MessageBox.Show("没有记录");
            }
            else
            {
                //把查询到的tabe result 返回到表中
                dgvCollect.DataSource = result;
                dgvCollect.Refresh();
            }

        }
        #endregion
        #region 窗体登录后显示的内容
        /// <summary>
        /// 教师组合查询学生信息,窗体登录后显示的内容
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void frmTFInquireStudent_Load(object sender, EventArgs e)
        {
            //this.Text = "学生信息";
            CmbName1.Items.Add("卡号");
            CmbName1.Items.Add("学号");
            CmbName1.Items.Add("注册日期");

            CmbName2.Items.Add("卡号");
            CmbName2.Items.Add("注册日期");
            CmbName2.Items.Add("学号");

            CmbName3.Items.Add("卡号");
            CmbName3.Items.Add("注册日期");
            CmbName3.Items.Add("学号");
        }
        #endregion

猜你喜欢

转载自blog.csdn.net/xml1996/article/details/84201246
今日推荐