一步一步教你使用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


作者:魏琼东
出处:http://www.cnblogs.com/eastjade
关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教!
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com 联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。

posted @ 2010-11-08 09:23  魏琼东  阅读(2781)  评论(22编辑  收藏  举报