开发者社区> 科技小能手> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

一步一步教你使用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脚本请下载:http://files.cnblogs.com/eastjade/demo.db.doc.sql.rar,本例完整代码下载:Product.Demo.rar

链接

QQ群:116773358


本文转自 agilelab 51CTO博客,原文链接:http://blog.51cto.com/agilelab/603069

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-入库业务结尾工作-演示单据的打印
回顾与说明      首先给大家说声抱歉,上一周忙了一些其他的事,博客也就差不多一周没有更新,让关注AgileEAS.NET平台的朋友们久等了,希望大家能继续关注AgileEAS.NET平台,关注AgileEAS.NET平台所采用的架构设计实践和AgileEAS.NET平台背后的一些软件工程实践思考。
570 0
一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-在UI中应用DataUIMapper组件
系列回顾       WinForm篇我用了一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-实例一个模块(商品字典)和一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-实现字典的打印两篇文章实例演示了一个基于AgileEAS.NET实现一个简单的增加、删除、修改、查询与打印的典型的简单应用案例,这应该是一个典型的MIS系统的应用场景。
629 0
一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的批量删除与更新
系列回顾           前面的文章一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的基本操作和一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的条件查询两篇文章我演示了ORM的基本使用并引申到开发中最常见的条件查询业务,今天我基于前一篇文章的条件查询的基础演示根据条件的批量删除与更新。
605 0
一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇阶段总结与WinForm篇展望
基础篇阶段总结          我在一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇中原计划是从UDA讲到ORM,再引出DAL层,经由DAL层引申出分层结构,进行讲解业务层,并且在UI--->BL--->DAL的基础上引出目前最流行的基于“面向服务架构的”思路,进而把SOA的理念融合进这个例程,并通过AgileEAS.NET平台中的SL和分布式ORM技术实现这种理论。
786 0
23703
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载