【机房合作】——根据时间查询记录的模板

  前言

  模板模式在机房收费系统中适用于所有具有相同窗体界面和相同逻辑的功能。因此在机房中不单单是组合查询使用模板模式,而且在操作员根据时间查询收取金额和返还金额的操作也使用了。如果说组合查询模板模式是我们站在巨人肩膀上实现的结果,那么,根据金额查询,这就要我们举一反三,自己动手去做了。现在我愿意做一个小巨人,分享给大家代码库。哈哈。

  内容

        首先应该建立母版窗体,如下:


     建立继承窗体,就不用一个一个画控件了。大家还会建立继承窗体么?

       右击项目——>添加——>添加窗体——>windowsform——>继承的窗体


给自己的窗体起一个名字,点击确定就生成了如下的窗体。


  在模板中写代码

如下:

  UI层 代码:

#region 获取数据库表名
        /// <summary>
        /// 获取数据库表名
        /// </summary>
        /// <returns></returns>
        protected virtual string GetdbName()
        {
            return "";
        }
        #endregion

#region 定义虚函数,将字段转化成数据库字段 +ToEnglish+郝张晶+2016年11月21日15:58:59
        /// <summary>
        /// 定义虚函数,将字段转化成数据库字段
        /// </summary>
        /// <param name="DTPDate"></param>
        /// <returns></returns>
        public virtual string ToEnglish(string DTPDate)
        {
            return "";
        }
        #endregion

#region  拼接查询的sql字符串 + StrText+郝张晶 +2016年12月3日11:19:21
        
        public virtual string StrText(frmQueryRecordMonther  frm, Entity.QueryRecordEntity  QueryRecordentity)
        {
            //定义SQL语句
            string CmdText;
         //   CmdText = "" + QueryRecordentity.StartDate + QueryRecordentity.EndDate + "'";    
        CmdText =""+QueryRecordentity .StartDate +" "+"between"+"'"+StartDate.Value .ToString ("yyyy-MM-dd")+"'"+" "+"and"+" "+"'"+EndDate.Value .ToString ("yyyy-MM-dd") +"'";
            return CmdText;
        }
        #endregion

 protected virtual void Todgv(DataTable  myqueryRecordlist)
        {

        }  

    #region  查询时间
        private void btnOK_Click(object sender, EventArgs e)
        {
            //先判断开始时间是否大于结束时间
            //判断起始时间不能小于结束时间
            //先转换为string类型
            string strStart = StartDate.Text;
            string strEnd = EndDate.Text;
            DateTime dt1 = Convert.ToDateTime(strStart);
            DateTime dt2 = Convert.ToDateTime(strEnd);

            if (DateTime.Compare(dt1, dt2) > 0)
            {
                MessageBox.Show("起始时间不能大于结束时间!", "提示");
            }
            else {
                //实例化窗体
                frmQueryRecordMonther frmquery = new frmQueryRecordMonther();
                //定义实体
                Entity.QueryRecordEntity queryReocrdEntity = new Entity.QueryRecordEntity();
                //给实体赋值
                queryReocrdEntity.dBName = GetdbName();
                queryReocrdEntity.StartDate = ToEnglish(StartDate.Text.Trim());
                queryReocrdEntity.EndDate = ToEnglish(EndDate.Text.Trim());
                //queryReocrdEntity.StartDate = StartDate.Text.ToString ();
                //queryReocrdEntity.EndDate = EndDate.Text.ToString();
                queryReocrdEntity.SQLString = StrText(frmquery, queryReocrdEntity);
       

                //实例化外观
                Facade.MixQueryFacade facMixQuery = new Facade.MixQueryFacade();
                //将数据传递到外观
                DataTable  myqueryRecordlist = facMixQuery.SelectRecord(queryReocrdEntity);
                if (myqueryRecordlist == null)
                {
                    MessageBox.Show("没有记录!");
                }
                else {
                    dgvMother.DataSource = myqueryRecordlist;
                    //让数据适应单元格大小
                    AutoSizeColumn auto = new AutoSizeColumn();
                    auto.AutoSize(dgvMother);
                    Todgv(myqueryRecordlist);
                }
            }
        }
        #endregion

        #region  当改变时间的时候 没有方法
        private void DTPStart_ValueChanged(object sender, EventArgs e)
        {

        }
        #endregion

               Facade层

 public DataTable  SelectRecord(QueryRecordEntity enQueryRecord)
      { 
            //定义
          BLL.MixQueryBll Queryrecord = new MixQueryBll();
          //调用B层方法
          DataTable  myrecordlist = Queryrecord.SelectRecord(enQueryRecord);
          return myrecordlist;
      }
  BLL层:

  public DataTable SelectRecord(QueryRecordEntity queryrecord) 
        {
            DataTable dt = new DataTable();
            IDAL.IGroupQuerryByDate idal = null;
            idal = factory.SetGroupQuerryByDate();
            dt = idal.IselectGroup(queryrecord);
            return dt;
        }
   DAL层:

 public DataTable IselectGroup(Entity.QueryRecordEntity enGroup)
        {
            SQLHelper sqlHelper = new SQLHelper();
            //查询语句
            string strText = "select * from " + enGroup.dBName + " where "+ enGroup.SQLString;
            DataTable dt = new DataTable();
            //查询数据库
            dt = sqlHelper.ExecSelect (CommandType.Text,strText);

            return dt;
        }
  Facatory层
public IGroupQuerryByDate SetGroupQuerryByDate() 
        {
            IGroupQuerryByDate igroupquerrybydate = (IGroupQuerryByDate)Assembly.Load(AssemblyName).CreateInstance("GroupQuerryByDate");
            return igroupquerrybydate;
        }
  Entity层

public   class QueryRecordEntity
    {
     private string _dBName;
     public string dBName
     {
         get { return _dBName; }
         set { _dBName = value; }
     }

     private string _StartDate;
     public string StartDate
     {
         get { return _StartDate; }
         set { _StartDate = value; }
     }

     private string _EndDate;
     public string EndDate
     {
         get { return _EndDate ; }
         set { _EndDate  = value; }
     }

     private string _SQLString;
     public string SQLString
     {
         get { return _SQLString; }
         set { _SQLString = value; }
     }
    }


继承窗体中只需要写U层的代码:

  

  #region  对Todgv方法进行重写,文本转换为实体对应的属性
        protected override void Todgv(DataTable  myqueryRecordlist)
        {
            dgvMother.DataSource = myqueryRecordlist;
            dgvMother.Columns[0].HeaderText = "学生学号";
            dgvMother.Columns[1].HeaderText = "卡号";
            dgvMother.Columns[2].HeaderText = "充值金额";
            dgvMother.Columns[3].HeaderText = "充值日期";
            dgvMother.Columns[4].HeaderText = "充值时间";
            dgvMother.Columns[5].HeaderText = "充值教师";
            dgvMother.Columns[6].HeaderText = "使用状态";
            dgvMother.Columns[7].HeaderText = "结账状态";
            //让数据适应单元格大小
            AutoSizeColumn auto = new AutoSizeColumn();
            auto.AutoSize(dgvMother);
        }
        #endregion

        #region  获取数据库表名  对GetdbName方法进行重写
        protected override string GetdbName()
        {
            return "Recharge_Info";
        }
        #endregion

        #region 将窗体中的控件转换成数据库中的字段
        public override string ToEnglish(string DTPDate)
        {
            return "rechargeDate";
        }
        #endregion
 总结

  举一反三,是最终的道理,这是根据时间查询返还金额和充值金额的逻辑。如有错误请大神斧正。另外如果有更简单的方法,请联系我~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值