回顾与说明
前面我们把“商品字典”、“商品入库”、“商品库存查询”三个模块已经概括或者详细的演示完了,这些模块涉及到简单数据的增、删、修,也涉及到复杂业务处理的事务、业务层提取,以及MIS系统中非常常见的查询、报表打印技术和基础字典的缓存查询技术。
本文内容
今天我们将以另外一种技术实现另一个模块“商品入库查询”,将采用何种技术呢,其实也是一个很简单的技术,在构建UI应用中使用报表技术,即我们把打印预览的报表技术使用在业务查询应用的主体UI之中,如下图所示一样的效果:

制做界面
首先,我们需要在UI项目中增加一个WinForm窗体ProductInQueryForm拖动控件达到如下效果:
在这里,我们需要注意的是需要向界面放一个报表预览控件,报表预览控件由EAS.Report.Controls程序集承载,类型EAS.Report.Controls.RDLReportViewer,打印预览控件工具条显示位置由属性ToolBoxDockStyle决定,我们设置为DockStyle.Bottom。
处理查询
接下来我们编写查询相关的代码,先在数据层接口项目中的IProductInList的分部类定义IProductInList.cs文件中增加如下代码:
1: ///
2: /// 表接口 IProductInList(产品入库)。
3: ///
4: public partial interface IProductInList
5: {
6: ///
7: /// 根据入库票据号查询入库明细。
8: ///
9: /// 入库票据号。
10: void GetProductInList(string billCode);
11:
12: ///
13: /// 根据入库时间及拼音简码查询入库明细。
14: ///
15: /// 开始时间。
16: /// 结束时间。
17: /// 拼音简码。
18: void GetProductInList(DateTime startTime,DateTime endTime,string pyCode);
19: }
同样,我们需要在数据层实现项目中实现这个方法:
1: public void GetProductInList(DateTime startTime, DateTime endTime, string pyCode)
2: {
3: Condition condition = this.CreateCondition();
4:
5: if (!startTime.Equals(endTime))
6: {
7: List<DateTime> times &#61; new List<DateTime>(2);
8: times.Add(startTime);
9: times.Add(endTime);
10:
11: condition.AddElement("InTime", times, ElementType.BetWeen);
12: }
13:
14: if (pyCode.Length > 0)
15: condition.AddElement("SqlText", "CODE in (select CODE from dbo.PRODUCT where PYCODE like &#39;" &#43; pyCode &#43; "%&#39;)", ElementType.SqlCondition);
16:
17: this.Query(condition);
18: }
大家在这地方仔细看一下&#xff0c;因为在商品库存表中没有定义产品的拼音简码&#xff0c;所以我就使用了一个字查询,并以SQL条件的形式写了出来&#xff0c;在实现应用中&#xff0c;应该在产品库存表中增加拼音简码字典&#xff0c;以方便查询。
制作报表
这一步在前面的文章中已经有过详细的介绍了&#xff0c;在这就简单的走过&#xff0c;打开报表设计器&#xff0c;选择对象报表&#xff0c;数据对象为Product.DAL.SQLServer.ProductInList&#xff0c;我们做出如下样式的报表&#xff1a;

需要注意的是&#xff0c;在这个报表中&#xff0c;我增加了一个分组&#xff0c;按单据号进行分组并显示分组统计&#xff0c;完成报表设计之后&#xff0c;保存在编译目标目录中的Reports文件夹中并取名为“商品入库查询报表.rdl”。
集成代码
接下来我们修改程序&#xff0c;把报表挂载进来&#xff0c;编写“查询”按钮的事件处理代码&#xff1a;
1: private void btnSearch_Click(object sender, EventArgs e)
2: {
3: //加载报表
4:
5: if (this.reportViewer.SourceRdl&#61;&#61;null)
6: {
7: System.IO.TextReader textReader &#61; null;
8: try
9: {
10: string fileName &#61; Path.Combine(Application.StartupPath, "Reports\\商品入库查询报表.rdl");
11: textReader &#61; new System.IO.StreamReader(fileName);
12: this.reportViewer.SourceRdl &#61; textReader.ReadToEnd();
13: }
14: finally
15: {
16: if (textReader !&#61; null)
17: textReader.Close();
18: }
19: }
20:
21: //处理数据
22: IProductInList table &#61; DALHelper.DALManager.CreateProductInList();
23: table.GetProductInList(this.dtpStartTime.Value,this.dtpEndTime.Value, this.tbSearch.Text);
24: this.reportViewer.DataObject &#61; table;
25: }
运行结果
编译并运行程序&#xff0c;我们看一下运行效果&#xff1a;


我们把报表导出来&#xff0c;选择导出Excel格式&#xff1a;

这里我们需要注意的是&#xff1a;导出Excel格式只支持Excel2007格式&#xff0c;这个让我很纠结&#xff0c;我不喜欢装备庞大的office2007,2010更是用一个月就用不成了&#xff0c;挺郁闷的&#xff0c;Wps自带的表格软件打不开这个格式。
至此&#xff0c;“商品入库查询”模块的相关处理就此结束&#xff0c;接下来我将介绍“商品字典”的另一个实现&#xff0c;同时演示ORM对象与DataGridView的绑定技术&#xff0c;希望大家感兴趣&#xff0c;对AgileEAS.NET平台感兴趣的朋友呢&#xff0c;可以下载了完整代码之后自己看看&#xff0c;有问题请及时的和我联系。
有关本例所涉及的数据表结构请参考基于AgileEAS.NET平台基础类库进行应用开发-总体说明及数据定义一文&#xff0c;有关数据对象模型定义文件、文档、DDL脚本请下载&#xff1a;http://files.cnblogs.com/eastjade/demo.db.doc.sql.rar&#xff0c;本例完整代码下载&#xff1a;Product.Demo.rar。
链接
一步一步教你使用AgileEAS.NET基础类库进行应用开发-系列目录
AgileEAS.NET平台开发指南-系列目录
AgileEAS.NET应用开发平台介绍-文章索引
AgileEAS.NET平台应用开发教程-案例计划
AgileEAS.NET官方网站
敏捷软件工程实验室
QQ群&#xff1a;116773358