您的位置:首页 > 其它

一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-库存查询模块

2011-01-17 08:20 991 查看

[b]回顾与说明[/b]

前面我就用了大量的篇幅我讲解了“商品入库”模块,在商品入库模块之中,我们介绍 了与之相关的管理信息系统开发中的一个共性场景,以及这个应用场景中所涉及的缓存、业务处理、票据打印等相关的技术。 可以说,在WinForm篇中的示例代码之中,最有价值的模块就是“商品入库”,在真实的MIS应用场景中,有至少60%的应用与“商品入库”类似。

本文的内容

我们通过“商品入库模块”完成了商品的库操作,系统会写入数据库商品入库明细和商品库存信息,那么这些信息如何查呢,我们得提供“库存信息查询”和“入库记录查询”两个模块。 本文将详细的介绍“库存信息查询”模块实现过程,“库存信息查询”要实现的功能为:根据用户的输入码(拼音简码)和查询选项(是否显示零库存记录)查询商品库存信息(库存表)并显示在界面上,操作员也可以选择把查询结果打印出来。

制做界面

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

处理查询

接下来我们编写查询相关的代码,先在数据层接口项目中的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,我们做出如下样式的报表:

把制作好的报表保存在编译目标目录中的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:  }

修改程序,控制打印

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

打印预览:

至此,“商品库存查询”模块的相关处理就此结束,接下来我将介绍“入库信息查询”,这个模块我将介绍大家直接使用报表做为UI呈现主体,希望大家感兴趣,对AgileEAS.NET平台感兴趣的朋友呢,可以下载了完整代码之后自己看看,有问题请及时的和我联系。 有关本例所涉及的数据表结构请参考基于AgileEAS.NET平台基础类库进行应用开发-总体说明及数据定义一文,有关数据对象模型定义文件、文档、DDL脚本请下载:http://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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐