zoukankan      html  css  js  c++  java
  • 一步一步教你使用AgileEAS.NET基础类库进行应用开发WinForm应用篇库存查询模块

    回顾与说明

        前面我就用了大量的篇幅我讲解了“商品入库”模块,在商品入库模块之中,我们介绍 了与之相关的管理信息系统开发中的一个共性场景,以及这个应用场景中所涉及的缓存、业务处理、票据打印等相关的技术。

        可以说,在WinForm篇中的示例代码之中,最有价值的模块就是“商品入库”,在真实的MIS应用场景中,有至少60%的应用与“商品入库”类似。

    本文的内容

        我们通过“商品入库模块”完成了商品的库操作,系统会写入数据库商品入库明细和商品库存信息,那么这些信息如何查呢,我们得提供“库存信息查询”和“入库记录查询”两个模块。

         本文将详细的介绍“库存信息查询”模块实现过程,“库存信息查询”要实现的功能为:根据用户的输入码(拼音简码)和查询选项(是否显示零库存记录)查询商品库存信息(库存表)并显示在界面上,操作员也可以选择把查询结果打印出来。

    制做界面

          首先,我们需要在UI项目中增加一个WinForm窗体StoreQueryForm拖动控件达到如下效果:

    image

     处理查询

          接下来我们编写查询相关的代码,先在数据层接口项目中的IProductStoreList的分部类定义IProductStoreList.cs文件中增加如下代码:

     1:  /// <summary>
     2:  /// 表接口 IProductStoreList(产品库存)。
     3:  /// </summary>
     4:  public partial interface IProductStoreList
     5:  {
     6:      /// <summary>
     7:      /// 查询商品库存。
     8:      /// </summary>
     9:      /// <param name="pyCode">拼音码。</param>
    10:      /// <param name="showZero">是否显示零库存记录。</param>
    11:      void GetProductStoreList(string pyCode,bool showZero);
    12:  }

             同样,我们需要在数据层实现项目中实现这个方法:  

     1:  public void GetProductStoreList(string pyCode, bool showZero)
     2:  {
     3:      Condition condition = this.CreateCondition();
     4:   
     5:      if (pyCode.Length > 0)
     6:      {
     7:          condition.AddElement("SqlText", "CODE in (select CODE from dbo.PRODUCT where PYCODE like '" + pyCode + "%')", ElementType.SqlCondition);
     8:      }
     9:   
    10:      if (!showZero)
    11:          condition.AddElement("NUMBER", 0, ElementType.GreaterThan);
    12:   
    13:      condition.AddOrderElement("CODE");
    14:      condition.AddOrderElement("IDN", true);
    15:      this.Query(condition);
    16:  }

              大家在这地方仔细看一下,因为在商品库存表中没有定义产品的拼音简码,所以我就使用了一个字查询,并以SQL条件的形式写了出来,在实现应用中,应该在产品库存表中增加拼音简码字典,以方便查询。

            接下来我们写编写UI中的“查询”按钮的事件处理代码如下:

     1:  private void btnSearch_Click(object sender, EventArgs e)
     2:          {
     3:              IProductStoreList table = DALHelper.DALManager.CreateProductStoreList();
     4:              table.GetProductStoreList(this.tbSearch.Text, this.cnZero.Checked);
     5:   
     6:              decimal sumMoney = decimal.Zero;
     7:   
     8:              try
     9:              {
    10:                  this.Cursor = Cursors.WaitCursor;
    11:                  this.lvInfo.Tag = table;
    12:   
    13:                  this.lvInfo.BeginUpdate();
    14:                  this.lvInfo.Items.Clear();
    15:   
    16:                  foreach (IProductStore ps in table.Rows)
    17:                  {
    18:                      decimal money = ps.Price * ps.Number;
    19:                      sumMoney += money;
    20:                      ListViewItem item = new ListViewItem(new string[] { string.Empty, ps.Code, ps.Name, ps.Spec, ps.Unit, ps.Price.ToString("F2"), ps.Number.ToString(), money.ToString("F2") }, 0);
    21:                      this.lvInfo.Items.Add(item);
    22:                  }
    23:   
    24:              }
    25:              finally
    26:              {
    27:                  this.lvInfo.EndUpdate();
    28:                  this.Cursor = Cursors.Default;
    29:              }
    30:   
    31:              this.lblTip.Text = "汇总:共有记录" + table.Rows.Count + "条,总金额" + sumMoney .ToString("F2")+ "元";
    32:          }        

           到这一步,我们就完成了数据查询并且显示在界面上的需求,下一步完成打开导出。

    处理打印

          首先,我们需要制作报表,这一步在前面的文章中已经有过详细的介绍了,在这我就不介绍了,选择对象报表,数据对象为Product.DAL.SQLServer.ProductStoreList,我们做出如下样式的报表:

    VF02_C{I~7`84YDLRH1OI9O

            把制作好的报表保存在编译目标目录中的Reports文件夹中并取名为商品库存查询报.rdl。

           接下来我们修改程序,把报表挂载进来,编写“打印预览”按钮的事件处理代码:

     1:  private void btnPrint_Click(object sender, EventArgs e)
     2:  {
     3:      if (this.lvInfo.Items.Count == 0)
     4:      {
     5:          MessageBox.Show("没有需要打印的数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     6:          return;
     7:      }
     8:   
     9:      if (this.printForm == null)
    10:          this.printForm = new RDLViewDialog();
    11:   
    12:      //
    13:      System.IO.TextReader textReader = null;
    14:      try
    15:      {
    16:          string fileName = Path.Combine(Application.StartupPath, "Reports\\商品库存查询报表.rdl");
    17:          textReader = new System.IO.StreamReader(fileName);
    18:          this.printForm.SourceRdl = textReader.ReadToEnd();
    19:      }
    20:      finally
    21:      {
    22:          if (textReader != null)
    23:              textReader.Close();
    24:      }
    25:   
    26:      this.printForm.DataObject = this.lvInfo.Tag;
    27:      this.printForm.PrintPreview();
    28:  }

     修改程序,控制打印

           编译并运行程序,我们看一下运行效果:

    image
            打印预览:

    image

           至此,“商品库存查询”模块的相关处理就此结束,接下来我将介绍“入库信息查询”,这个模块我将介绍大家直接使用报表做为UI呈现主体,希望大家感兴趣,对AgileEAS.NET平台感兴趣的朋友呢,可以下载了完整代码之后自己看看,有问题请及时的和我联系。  

          有关本例所涉及的数据表结构请参考基于AgileEAS.NET平台基础类库进行应用开发-总体说明及数据定义一文,有关数据对象模型定义文件、文档、DDL脚本请下载:https://files.cnblogs.com/eastjade/demo.db.doc.sql.rar,本例完整代码下载:Product.Demo.rar

    链接

    一步一步教你使用AgileEAS.NET基础类库进行应用开发-系列目录

    DotNET企业架构应用实践-系列目录

    AgileEAS.NET平台开发指南-系列目录

    AgileEAS.NET应用开发平台介绍-文章索引

    AgileEAS.NET平台应用开发教程-案例计划

    AgileEAS.NET官方网站

    敏捷软件工程实验室

    QQ群:116773358

  • 相关阅读:
    不忘初心,方得始终
    我的博客开通了~第一个帖子奉上
    @TableLogic表逻辑处理注解(逻辑删除)
    nginx笔记
    ERROR: permission denied for relation hycom 权限被拒绝
    Mybatis-plus学习笔记
    SpringBoot学习笔记
    org.apache.ibatis.binding.BindingException原因总结(找不到映射文件)
    SpringBoot优先加载设置
    Date时间处理
  • 原文地址:https://www.cnblogs.com/eastjade/p/1870869.html
Copyright © 2011-2022 走看看