![C#项目开发全程实录(第4版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/544/24172544/b_24172544.jpg)
2.9 客户级别分析模块设计
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P91_21988.jpg?sign=1739252992-Vmg3f5jo0TU5UhZPmAEH9rtKFhfDPArC-0-c81ef6152f23954eaef5a8eead1220fa)
视频讲解
2.9.1 客户级别分析模块概述
客户级别分析窗体主要反映不同级别的客户情况,操作人员可以通过选择客户等级,查看指定级别的客户详细信息。客户级别分析窗体运行结果如图2.25所示。
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P91_21984.jpg?sign=1739252992-UlX5DBSP6Nx6w7qDrOYKB2yaC7M1gLLO-0-3ca1be747418f72929e9b92ba4ac8139)
图2.25 客户级别分析窗体
2.9.2 客户级别分析模块技术分析
在开发客户级别分析模块时,用到了水晶报表控件。使用水晶报表时,需要通过编写代码来动态连接水晶报表的数据源,否则程序在非开发机器上运行时会弹出“数据库登录对话框”。动态连接水晶报表数据源,需要通过设置TableLogOnInfo实例的ConnectionInfo属性来实现,下面将详细介绍。
说明
Visual Studio 2017开发环境中默认没有水晶报表,开发人员在使用时,首先需要到SAP官方网站下载Crystal Reports安装文件进行安装,然后才可以在Visual Studio 2017开发环境中创建水晶报表。
(1)创建TableLogOnInfo类的实例,该实例可用来获取或设置Table连接的信息(包括服务器名称、数据库名、登录用户名、登录密码等),创建该实例的示例代码如下。
TableLogOnInfo logOnInfo = new TableLogOnInfo();
(2)设置TableLogOnInfo实例的ConnectionInfo属性,下面的示例代码描述了本系统的水晶报表连接数据源的实际情况。
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P92_52345.jpg?sign=1739252992-VggaJDwboQ8Mqf41v35RcEWYvMIiJ1Qk-0-b767464b9fb5bdc2d9001ab08c70cf72)
2.9.3 客户级别分析模块实现过程
本模块使用的数据表:tb_ClientInfo
客户级别分析模块的具体实现步骤如下。
(1)新建一个Windows窗体,命名为frmCLAnalyse.cs,用于实现客户级别分析功能,该窗体主要用到的控件、控件属性设置及其用途如表2.13所示。
表2.13 客户级别分析窗体主要用到的控件
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-T92_51724.jpg?sign=1739252992-G6xzE7M9HYHEMU6kJ58uyVFpYKogpqfh-0-9f495cbe8e96a00a5d931cd2062604d1)
(2)声明公共类OperateAndValidate的一个全局对象,通过类对象调用类中的功能方法。实现关键代码如下:
例程33 代码位置:资源包\TM\02\CRM\SumManage\frmCLAnalyse.cs
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P92_52348.jpg?sign=1739252992-SSYcy1gVfCZJNWhPBvkVi9hsfy7pXorw-0-1cc5fcd818ec9956757012c66bf4de62)
frmCLAnalyse窗体的Load事件中,通过调用公共类OperateAndValidate中的CrystalReports()方法对客户级别分析报表进行数据绑定,显示不同级别的客户信息。frmCLAnalyse窗体的Load事件关键代码如下:
例程34 代码位置:资源包\TM\02\CRM\SumManage\frmCLAnalyse.cs
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P93_52351.jpg?sign=1739252992-8MG2NcafQvD6cVLpMe8lfAowhzVCoxDv-0-c907cd1f324d1b1ee69760d5b01c04ee)
代码贴士
❶ 自定义string字符串,用来存储SQL查询语句。
❷ 调用公共类OperateAndValidate中的CrystalReports()方法对指定报表进行数据绑定。
单击“查找”按钮,程序根据用户选择的查询条件,在客户信息表中查找出指定级别的客户信息,并将其结果绑定到客户级别分析报表上。“查找”按钮的Click事件代码如下:
例程35 代码位置:资源包\TM\02\CRM\SumManage\frmCLAnalyse.cs
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P93_52354.jpg?sign=1739252992-pUC5rJ0FD7M42If6Z0VJ3A8Nu7cDJHbR-0-2a3a2a1f7f5f0a9660bdf375023c0d31)
2.9.4 单元测试
在绑定水晶报表时,用SQL语句取值,可能会出现如图2.26所示的信息提示框。
![](https://epubservercos.yuewen.com/64AA3F/13043251004879506/epubprivate/OEBPS/Images/Figure-P93_22120.jpg?sign=1739252992-b1UppgLKDIJSykdWncbrVbmDjJviFFLx-0-09e3ce05056ffb98f53ca7df1823748a)
图2.26 “Crystal Report Windows窗体查看器”对话框
原绑定水晶报表的完整代码如下:
string P_str_sql = "select * from tb_ClientInfo where CStep like '" + tscboxCLevel.Text.Trim() + "'"; CReportViewer.ReportSource = opAndvalidate.CrystalReports("CReportCLAnalyse.rpt", P_str_sql);
经过分析,发现错误是由于在绑定水晶报表时,给其赋值的SQL语句的写法有问题。标准的绑定水晶报表的SQL语法如下:
{Table.Column} like 'string'
修改后的绑定水晶报表的代码如下:
string P_str_sql = " {tb_ClientInfo.CStep} like '" + tscboxCLevel.Text.Trim() + "'"; CReportViewer.ReportSource = opAndvalidate.CrystalReports("CReportCLAnalyse.rpt", P_str_sql);