C__WinForm实践开发教程-chp7水晶报表技术
- 格式:ppt
- 大小:2.99 MB
- 文档页数:44
1。
第一步是添加新项CrystalReport12。
在CrystalReport1.rpt面页右键选择:”数据库” ”添加/删除数据库”出现下面对话框:然后点开OLE DB(ADO)的加号,将弹出选择数据库的对话框其中”项目数据”里面的”当前连接”显示的就是OLE DB(ADO)的连接,这样就可以将表添加到右边的”选定的表”中了(切记:不要既从”OLE DB”中选表或命令又从”当前连接”中选,如果你用了数据集,也是一样的道理,否则全提示出”登陆失败”的错误!)3。
字段资料管理器里面”数据库字段”里把字段直接拖到CrystalReport.rpt里面了.布置好布局.4。
回到WebForm1.aspx页面,选择控件CrystalReportViewer将其放到页面上。
5。
代码using CrystalDecisions.Shared;using CrystalDecisions.CrystalReports.Engine;在WebForm1.aspx.cs的Form_Load里面添加代码:TableLogOnInfo logOnInfo = new TableLogOnInfo();ReportDocument rpdMy0= new ReportDocument();logOnInfo.ConnectionInfo.ServerName = "NNN";logOnInfo.ConnectionInfo.Password="dong";logOnInfo.ConnectionInfo.DatabaseName="Lab";erID = "sa";String path = Server.MapPath("CrystalReport2.rpt");rpdMy0.Load(path);rpdMy0.Database.Tables[0].ApplyLogOnInfo(logOnInfo);CrystalReportViewer1.ReportSource = rpdMy0;其中:TableLogOnInfo类是:提供属性,以便检索和设置表连接选项.它有一个连接的属性ConnectionInfo,用来设置与数据库的连接.如上面的ServerName等.生成一个报表文档对象将前面我们做好的那个CrystalReport1.rpt赋给它.在这里要注意的是Database属性!然后把报表对象做为CrystalReportViewer1的数据源.或者,获得数据库的方法改为直接从数据库获得DataSetusing System.Data.SqlClient;using System.Collections.Specialized;string strConn=System.Configuration.ConfigurationSettings. AppSettings["DB"].ToString();using (SqlConnection conn = new SqlConnection(strConn)) {SqlDataAdapter da = new SqlDataAdapter(strSQL,conn); //strSQL是SQL语言"select * from dbo.table1"DataSet ds=new DataSet();da.Fill( ds);CrystalReport1 cr1 = new CrystalReport1();cr1.SetDataSource( ds);CrystalReportViewer1.ReportSource = cr1;}using CrystalDecisions.Shared;using CrystalDecisions.CrystalReports.Engine;在WebForm1.aspx.cs的Form_Load里面添加代码:TableLogOnInfo logOnInfo = new TableLogOnInfo();ReportDocument rpdMy0= new ReportDocument();logOnInfo.ConnectionInfo.ServerName = "NNN";logOnInfo.ConnectionInfo.Password="dong";logOnInfo.ConnectionInfo.DatabaseName="Lab";erID = "sa";String path = Server.MapPath("CrystalReport2.rpt");rpdMy0.Load(path);rpdMy0.Database.Tables[0].ApplyLogOnInfo(logOnInfo);CrystalReportViewer1.ReportSource = rpdMy0;其中:TableLogOnInfo类是:提供属性,以便检索和设置表连接选项.它有一个连接的属性ConnectionInfo,用来设置与数据库的连接.如上面的ServerName等.生成一个报表文档对象将前面我们做好的那个CrystalReport1.rpt赋给它.在这里要注意的是Database属性!然后把报表对象做为CrystalReportViewer1的数据源.或者,获得数据库的方法改为直接从数据库获得DataSetusing System.Data.SqlClient;using System.Collections.Specialized;string strConn=System.Configuration.ConfigurationSettings. AppSettings["DB"].ToString();using (SqlConnection conn = new SqlConnection(strConn)) {SqlDataAdapter da = new SqlDataAdapter(strSQL,conn); //strSQL是SQL语言"select * from dbo.table1"DataSet ds=new DataSet();da.Fill( ds);CrystalReport1 cr1 = new CrystalReport1();cr1.SetDataSource( ds);CrystalReportViewer1.ReportSource = cr1;}using CrystalDecisions.Shared;using CrystalDecisions.CrystalReports.Engine;在WebForm1.aspx.cs的Form_Load里面添加代码:TableLogOnInfo logOnInfo = new TableLogOnInfo();ReportDocument rpdMy0= new ReportDocument();logOnInfo.ConnectionInfo.ServerName = "NNN";logOnInfo.ConnectionInfo.Password="dong";logOnInfo.ConnectionInfo.DatabaseName="Lab";erID = "sa";String path = Server.MapPath("CrystalReport2.rpt");rpdMy0.Load(path);rpdMy0.Database.Tables[0].ApplyLogOnInfo(logOnInfo);CrystalReportViewer1.ReportSource = rpdMy0;其中:TableLogOnInfo类是:提供属性,以便检索和设置表连接选项.它有一个连接的属性ConnectionInfo,用来设置与数据库的连接.如上面的ServerName等.生成一个报表文档对象将前面我们做好的那个CrystalReport1.rpt赋给它.在这里要注意的是Database属性!然后把报表对象做为CrystalReportViewer1的数据源.或者,获得数据库的方法改为直接从数据库获得DataSetusing System.Data.SqlClient;using System.Collections.Specialized;string strConn=System.Configuration.ConfigurationSettings. AppSettings["DB"].ToString();using (SqlConnection conn = new SqlConnection(strConn)) {SqlDataAdapter da = new SqlDataAdapter(strSQL,conn);//strSQL是SQL语言"select * from dbo.table1"DataSet ds=new DataSet();da.Fill( ds);CrystalReport1 cr1 = new CrystalReport1(); cr1.SetDataSource( ds);CrystalReportViewer1.ReportSource = cr1;}。
WinForm中使⽤CrystalReport⽔晶报表——基础,分组统计,⾃定义数据源开篇本篇⽂章主要是帮助刚开始接触CrystalReport报表的新⼿提供⼀个循序渐进的教程。
该教程主要分为三个部分1)CrystalReport的基本使⽤⽅法;2)使⽤CrystalReport对数据进⾏分组求和;3)CrystalReport如何使⽤⾃定义的数据源(如内存中的DataTable表)三个⽅⾯来写。
相信看懂了这个教程之后,对于⾃⼰项⽬中的实现报表这⼀功能,应该就能轻松的应对了。
⼀ CrystalReport模板的制作及显⽰A模板的制作1、右键【项⽬属性】添加⼀个⽔晶报表(在vs中需要安装CrystalReport模块,不同vs版本下载不同的CrystalReport版本:CrystalReport下载链接:)2、添加报表的设计界⾯如下:⼀个报表包括(报表头,页眉,详细资料,报表尾,页眉)5个基本部分。
3、现在我们需要给新建的报表添加⼀个数据源,右键左边的【数据库字段】选择相应的数据源,进⾏绑定。
我这⾥选择的是sqlserver数据库。
4、输⼊数据库的登录信息,然后选择需要绑定的数据库表,除了绑定数据表之外,还可以绑定sql语句查询的结果,以及存储过程和视图,下⾯给出绑定数据库表格,和绑定sql查询。
1)绑定数据库表格2)点击连接下⾯的【添加命令】绑定sql语句。
5、绑定数据库之后在报表左侧的【字段管理器】中就会出现该表以及sql查询结果的的相应表头字段。
6、把相应的字段在报表视图中进⾏布局。
到此⽔晶报表的模板已经做好了。
注意:页眉中的userName,courseName,score是可以更改。
B模板的显⽰1、⾸先在窗体上拖⼀个CrystalReportView控件作为显⽰报表模板。
2、在form_load事件⾥⾯写如下代码:CrystalReport1 cr = new CrystalReport1();//实例化⼀个报表模板this.crystalReportViewer1.ReportSource = cr;//为报表显⽰控件设置数据源3、运⾏报表设计点丑,但是你可以根基⾃⼰的风格进⾏排版设计,如字体,⼤⼩,颜⾊等啦。
c#水晶报表入门教程:对比FineReport之用户入门水晶报表(crystal report)和FineReport都是很常用的报表工具,这里对比一下它们的用户入门功能。
水晶报表用户入门如下:新用户快速入门下面的教程帮助您在创建第一张报表时即树立信心。
请使用本联机帮助的“目录”选项卡在教程中进行浏览。
在本教程中,当创建“客户列表”报表时,会获得有关该程序的介绍。
“客户列表”是最基本的商务报表,一般含有诸如客户名称、城市、地区和联系人姓名之类的信息。
现在开始学习基本概念:选择数据库,在报表中放置一些字段,然后选择要包含的特定记录。
接下来学习如何:插入和移动数据库字段。
添加标题并设置格式。
在“预览”选项卡中显示报表,以便可以精细调整报表。
使用“选择专家”以确保在报表中只包含所需的数据。
移动对象。
数据分组及排序。
插入图片。
打印报表。
开始之前本教程假设您已经熟悉了Microsoft Windows,并使用Windows环境中常见的惯用术语和过程。
如果您还不熟悉Windows,请参考Microsoft Windows文档,以获得进一步的解释。
程序中所有报表节的默认字体都设置为宋体、10磅。
如果更改了默认字体,或者打印机不支持这种字体,那么字段大小、字段间距和屏幕显示看上去将和教程中的不一样。
本教程是在Microsoft Windows2000平台上设计的。
如果使用不同的平台,则屏幕显示可能略有不同。
如果您还不熟悉Crystal Reports环境,请查看格式化,其中介绍了如何使用网格、自由格式位置、使用准线及格式设置活动。
创建报表1.单击“标准”工具栏上的“新建”。
Crystal Reports库出现。
2.3.库中包含了许多向导,用于指导您创建特定类型的报表。
因为在此处是学习报表的概念,所以可以跳过向导,从头开始创建报表。
在完成本教程的学习之后,可以使用向导创建一些报表,以比较哪种报表创建方法最适合您。
NET水晶报表首先要从概念入手,水晶报表(Crystal Report)是业内最专业、功能最强的报表系统,它除了强大的报表功能外,最大的优势是实现了与绝大多数流行开发工具的集成和接口。
1、.NET水晶报表的好处1)利用水晶报表可以进行数值求平均值,画图等2)利用水晶报表可以把文件导出不同的格式(word等)2、.NET水晶报表的两种格式1)pull模式,不利用DataSet,直接从数据库中取出数据2) push模式,使用DataSet,利用它进行数据的加载和处理等3. .NET水晶报表使用的库1)水晶报表的引擎(CREnging.dll),作用:合并数据,装换格式2)水晶报表设计器(CRDesigner.dll),作用:设计标题,插入数据等3)水晶报表查看控件(CRWebFormViewer.DLL)4)需要引入的命名空间ing CrystalDecisions.CrystalReports.Engine;ing CrystalDecisions.Shared;4、Pull模式下使用水晶报表1)创建rpt文件2)拖放CrystalReportViewer3)绑定5、读取.NET水晶报表文件3.private void ReadCRV(cryatalReportViewer crv)4. {5. openFileDialog dlg=new OpenFileDialog();6.dlg.Title="打开水晶报表文件";7.dlg.Filter="水晶报表文件(*.rpt)|*.rpt|所有文件|*.*";8. if(dlg.showDialog()==DialogResult.OK)9. {10.crv.ReportSource=dlg.FileName;11. }12. }6. B/S下读取报表的文件13.private void ReadCRV(cryatalReportViewer crv,File file)14. {15. string strName=file.PostedFile.FileName;16. if(strName.Trim()!="")17. {18.crv.ReportSource=strName19. Session["fileName"]=strName;20. }21. }在B/S中要防止数据源的丢失22.priavte void Page_Load(object sender,System.EventArgs e)23. {24. if(Session["fileName"]!=null)25. {26.crv.ReportSource=Session["fileName"].ToString();27. }28. }7. 假如直接从数据库中读取数据采用PULL模式可能出现错误(登录的用户名和密码不对)29.private void ReadCRV(CrystalReportViewer crv,CrystalReport cr)30. {31. ReportDocument reportDoc=new ReportDocument();32. reportDoc.Load(Server.MapPath(cr));//要加载的rpt文件的名字33. //解决登录的问题34. TableLogOnInfo logonInfo = new TableLogOnInfo();35. foreach(Table tb in ReportDoc.Database.Tables)36. {37.logonInfo=tb.LogOnInfo;38.logonInfo.ConnectionInfo.ServerName="(loacl)";39.logonInfo.ConnectionInfo.DatabaseName="Pubs";erId="sa";41.logonInfo.ConnectionInfo.Password="";42. tb.ApplyLogOnInfo(logonInfo);43. }44.crv.ReportSource=reportDoc;45. }8. 采用Push模式,直接在数据源读取46.private void BindReport(CrystalReportViewer crv)47. {48. string strProvider="Server=(local);DataBase=pubs;uid=sa;pwd=";49. CrystalReport cr=new CrystalReport();50. DataSet ds=new DataSet();51. SqlConnection conn=new SqlConnection(strProvider);52. conn.open();53. string strSql="select * from jobs";54. SqlDataAdapter dap=new SqlDataAdapter(strSql,conn);55. adp.Fill(ds,"jobs");56. cr.SetDataSource(ds);57.cr crv.ReportSource=cr;58. }9. 导出水晶报表的文件59.private void ExportCrv(CrystalReport cr)60. {61. DiskFileDestionOptions dOpt=new DiskFileDestionOptions();62.cr.ExportOptions.ExportDestinationType=ExportDestinationType.DiskFile();63.cr.ExportOptions.ExportFormatType= ExportFormatType.PortableDocFormat;64.dOpt.DiskFileName="C:\output.pdf";65.cr.ExportOptions.DestinationOptions=dOpt;66. cr.Export();67.68. }69. private void ExportCrv(CrystalReport cr,string strType,string strPath)70. {71. DiskFileDestionOptions dOpt=new DiskFileDestionOptions();72.cr.ExportOptions.ExportDestinationType=ExportDestinationType.DiskFile();73. switch(strType)74. {75. case "RTF":76.cr.ExportOptions.ExportFormatType=ExportFormatType.RichText;77.dOpt.DiskFileName=strPath;78. break;79. case "PDF":80.cr.ExportOptions.ExportFormatType=ExportFormatType.PortableDocFormat;81.dOpt.DiskFileName=strPath;82. break;83. case "DOC":84.cr.ExportOptions.ExportFormatType=ExportFormatType.WordForWindows;85.dOpt.DiskFileName=strPath;86. break;87. case "XLS":88.cr.ExportOptions.ExportFormatType=ExportFormatType.Excel;89.dOpt.DiskFileName=strPath;90. break;91. default;92. break;93.94. }95.cr.ExportOptions.DestinationOptions=dOpt;96. cr.Export();97.98. }10 B/S下水晶报表的打印99.priavte void PrintCRV(CrystalReport cr)100. {101. string strPrinterName=@"printName";102. PageMargins margins=cr.PrintOptions.PageMargins; 103.margins.bottomMargin = 250;104.margins.leftMargin = 350;105.margins.rightMargin = 350;106.margins.topMargin = 450;107. cr.PrintOptions.ApplyPageMargins(margins);108.cr.PrintOptions.printerName=strPrinterName;109. cr.PrintToPrinter(1,false,0,0)//参数设置为0,表示打印所用页110. }。
c#水晶报表入门教程:对比FineReport之报表填报水晶报表(crystal report)和FineReport都是很常用的报表工具,这里对比一下它们的报表填报功能。
表单表单的回填是水晶报表(Crystal Report)完全不能支持的功能。
FineReport 支持基于纯HTML的表单回填,支持各种主流的浏览器。
编辑风格表单提供普通文本编辑框、复选框、下拉列表框、下拉日历、文件上传等。
自动计算表单可支持类似EXCEL的自动计算功能,程序根据用户的设置在前端生成JavaScript表达式完成自动计算。
自动计算还可跨表,多sheet之间的相互运算。
数据的扩展允许报表单元格与数据库字段间任意对应,并有自动扩展的能力。
支持任意格式的表单回填数据。
直接回填到数据库用户填写的数据,都直接存储到数据库当中,无需中间环节。
多级汇总填报表单的报表同时还是个统计表,单元格数据可以有不同的来源和去向,这样可以先从下级机构汇总出数据再加以补充修改后填写到上级数据库中。
FineReport报表,其制表效率十倍于以国外产品为代表的传统报表工具。
对比点FineReport CrystalReport应用集成后台的环境支持纯JAVA,全支持个别产品只支持Windows前台的环境支持纯HTML,全支持一般仅支持IEJ2EE的应用服务器管理嵌入应用,可充分利用应用服务器各项能力独立服务器,应用服务器能力不可利用J2EE的WEB部署与应用统一部署单独安装部署,操作繁琐J2EE的应用接口丰富齐全,结合紧密通过网络协议,力度不足,统计图常采用古老的CGI方式Java Application集成支持非纯JAVA的不支持.NET的应用集成支持,独立服务支持页面的集成完全随意嵌入独立门户,很困难用户权限控制与应用程序一致独立机制很繁琐IDE集成能力有限支持不支持并发能力较强,4万单元格表在512M内存可并发50个以上基础程序对内存要求很高,并发数较少数据设计多数据源(集)直接间接支持完全分组(多层)支持支持,较繁琐完全交叉(多层)支持,无须专门处理支持,用专门的交叉模型不完全分组/固定行列支持编程准备数据上下分片支持,上下格式可不一致,固定变动混合格式一致的可编程准备数据,否则必须拼子表完成左右分片支持,固定变动混合,直接运算性能高固定列的可编程准备数据,采用DB叉乘性能很差跨行组运算支持,随意通用固定的简单跨行运算,跨组不支持独立格运算支持,随意通用固定几种运算,来自DB的要专门处理主从报表无须子表概念即可完成须用子表,数据无法沟通子表多层任意,格线可对一般两层,横向表不齐可缩放,横纵向均可自动摆位可自动摆位参数与宏均支持仅支持参数报表展现基本方案EXCEL网格式,方便快捷控件式,对齐繁琐导入EXCEL支持不支持套打绘制底图描绘精确度量报表输出格式标准HTML,PDF,word完全不失真的EXCEL,带格式文本PDF,特殊HTML,丧失格式的EXCEL,无格式文本统计图输出格式GIF,JPG,PNG GIF,JPG打印分页分栏横纵向均可,强制分页仅支持纵向,且不可分栏其它打印控制一纸多页,补空行,缩放缩放表单编辑风格文字编辑、下拉选择等不支持自动计算支持合法性检查支持数据库对应随意自动,行/列/交叉均可多级汇总填报支持部署和应用集成WEB部署FineReport报表工具的服务程序以JAR包形式出现,可与应用程序统一打成包一起部署在应用服务器上,安装非常轻松。
水晶报表基础操作从入门到精通1、水晶报表注册码在使用自带的水晶报表时,请注册,否则只能使用30次,水晶报表注册码如下:注册号:6707437608密码:AAP5GKS0000GDE100DS2、中使用水晶报表我们采用下面的几步使用Push模式执行水晶报表:1设计一个DataSet右击“解决方案浏览器”,选择“添加”--“添加新项”-->“数据集”,从“服务器资源管理器”中的“SQL Server”中拖放“Stores”表(位于PUBS数据库中)。
再将此表拖入数据集中。
而 .xsd文件中仅仅包含一个结构图,但是不会有任何数据在里面。
2创建一个.rpt文件同时将其指定给上一步建立的DataSet。
使用上面的介绍过的方法创建此文件,唯一的不同就是使用数据集来代替前面的直接连接数据。
建立.rpt文件之后,右击“详细资料”-->“添加/删除数据库”,在”数据库专家“窗口中,展开”项目数据“(代替以前的OleDb),展开“数据集”--“DataSet1”,选择“Stores”表。
将“Stores”表添加到“选定的表”中,点击“OK”。
3在aspx页面中拖放一个CrystalReportViewer控件同时将其与前面的rpt文件建立联系。
使用PULL模式下的方法,建立一个WebForm,添加一个Crystal Report Viewer 控件,并设定其属性,此处与PULL模式下是一致的。
代码如下:private void Page_Load(object sender, System.EventArgs e{DataSet1 ds = new DataSet1(;oCR = new MyReport(;SqlConnection MyConn = newSqlConnection(ConfigurationSettings.AppSettings["SqlConn"];MyConn.Open(;//直接访问数据表//string strSel = "select * from tbtree";//SqlDataAdapter MyAdapter = new SqlDataAdapter(strSel,MyConn;//MyAdapter.Fill(ds,"tbtree";//使用存储过程SqlCommand cmd = new SqlCommand("display", MyConn;mandType = CommandType.StoredProcedure;SqlDataAdapter MyAdapter = new SqlDataAdapter(cmd;MyAdapter.Fill(ds,"tbtree";oCR.SetDataSource(ds;}注意:在上面的代码中,你得注意一下oRpt是"Strongly Typed"的报表文件。
获取宾馆的身份证读卡器读取的信息,然后用报表打印出来,双击左边的列表里面的客户名字,在右边显示信息,然后可以打印出来,点击“获取最新客人信息”按钮会获得最新登记的客人信息。
用到的技术:水晶报表(通过数据库推送数据生成新的报表类容)访问ACCSEE数据库C#winForm编程C#访问ACCESS数据库、动态生成水晶报表、C#和水晶报表、水晶报表打印纸张设置、C#获取系统默认打印机的选定纸张所用软件:ACCESS2007VS2010水晶报表2008整个C#项目主要文件如下图:crystalReport1.rpt为报表模板文件dataset1.xsd为数据集框架,有个自定义的数据表,包含报表模板文件(crystalReport1.rpt)里面用的一些字段,用SQL语句向其中填充数据,然后附加给报表,生成报表XMLFile.xml为添加的一个xml配置文件,里面保存的有ACCESS数据库的访问密码信息,在随时手动更改using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Data.OleDb;using CrystalDecisions.ReportSource;using CrystalDecisions.CrystalReports.Engine;using System.Drawing.Printing;using System.Xml;namespace getPeopleInfo{public partial class Form1 : Form{public Form1(string str1){InitializeComponent();GetConnectString = str1;}private string connectString;protected string GetConnectString{get { return connectString; }set { connectString = value; }}OleDbConnection localConnectStr = new OleDbConnection(); //定义针对access数据库的的OleDb类型的连接对象ReportDocument myreport = new ReportDocument();DataSet1 datasetForRpt = new DataSet1(); //DataSet1是一个数据库集模型,这里创建一个它的实例引用,专门用于给水晶报表推送数据的DataSet datasetForCustList = new DataSet(); //定义客人列表数据集string rptPathString = AppDomain.CurrentDomain.BaseDirectory + "CrystalReport1.rpt"; //当把报表模型文件放在debug文件里面的时候用此语句获取报表的完整路径private void Form1_Load(object sender, EventArgs e){localConnectStr.ConnectionString = GetConnectString;myreport.Load(rptPathString); //加载报表myreport.SetDataSource(datasetForRpt); //设置报表数据源Printbutton.Enabled = false; //打印按钮暂时不可用,因为报表还没显示出数据}private void newCustPrint_Click(object sender, EventArgs e) //双击listBox框里面的选项事件{datasetForRpt.Clear(); //清除报表数据集中的数据OleDbDataAdapter dataAdapterGetCusList = new OleDbDataAdapter("SELECT top 1 姓名,性别,民族,出生,公民身份号码,住址,CStr(读取时间) as 读取时间FROM 身份证信息order by 读取时间desc ", localConnectStr);dataAdapterGetCusList.Fill(datasetForRpt, "DataTable1");myreport.SetDataSource(datasetForRpt);PrintDialog pd1 = new PrintDialog();int rawkind = pd1.PrinterSettings.DefaultPageSettings.PaperSize.RawKind;myreport.PrintOptions.PaperSize = (CrystalDecisions.Shared.PaperSize)rawkind;//把枚举数值转换为纸张类型//myreport.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.DefaultPaperSize;this.crystalReportViewer1.ReportSource = myreport;Printbutton.Enabled = true;}private void buttonGetCustList_Click(object sender, EventArgs e){listBoxCustomers.Items.Clear(); //清除列表里面已经有的项,防止重复显示datasetForCustList.Clear(); //清空内存中的客人列表数据集中的数据,防止重复添加OleDbDataAdapter dataAdapterGetnewCus = new OleDbDataAdapter("SELECT 姓名,公民身份号码,CStr(读取时间) as 读取时间FROM 身份证信息where 读取时间>#"+dateTimePicker_begin.Value.ToShortDateString()+" 00:00:00# and 读取时间<#"+dateTimePicker_end.Value.ToShortDateString()+" 23:59:59# order by 读取时间", localConnectStr);dataAdapterGetnewCus.Fill(datasetForCustList);foreach (DataRow dr in datasetForCustList.Tables[0].Rows){listBoxCustomers.Items.Add(dr[0].ToString() + " " + dr[1].ToString() + " " +dr[2].ToString());listBoxCustomers.Items.Add("\r\n"); //添加回车换行符}}private void listBoxCustomers_DoubleClick(object sender, EventArgs e){if (listBoxCustomers.Items.Count>0&&(listBoxCustomers.SelectedIndex>=0)&&(listBoxCustomers.SelectedItem.ToString()!="\r\n")){datasetForRpt.Clear();string[] sArray = listBoxCustomers.SelectedItem.ToString().Split(' ');OleDbDataAdapter dataAdapterGetCusList = new OleDbDataAdapter("SELECT distinct 姓名,性别,民族,出生,公民身份号码,住址,CStr(读取时间) as 读取时间FROM 身份证信息where 姓名='"+sArray[0]+"' and 公民身份号码='"+sArray[2]+"' and CStr(读取时间)='"+sArray[4]+" "+sArray[5]+"'", localConnectStr);//OleDbDataAdapter dataAdapterGetCusList = new OleDbDataAdapter("SELECT distinct 姓名,性别,民族,出生,公民身份号码,住址,读取时间FROM 身份证信息where 姓名='" + sArray[0] + "' and 公民身份号码='" + sArray[2] + "' and 读取时间=Cdate('" + sArray[4] + " " + sArray[5] + "')", localConnectStr); 用CDate函数也行dataAdapterGetCusList.Fill(datasetForRpt, "DataTable1");myreport.SetDataSource(datasetForRpt);PrintDialog pd1 = new PrintDialog();int rawkind = pd1.PrinterSettings.DefaultPageSettings.PaperSize.RawKind; //获取打印机首选项中的打印纸张类型的枚举数值myreport.PrintOptions.PaperSize = (CrystalDecisions.Shared.PaperSize)rawkind; //把枚举数值转换为纸张类型,并设置报表的打印纸张类型为系统默认打印机首选项中设置的打印纸张类型//myreport.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.DefaultPaperSize;//上面一句设置报表的打印纸张类型为系统默认打印机驱动中的默认打印纸张类型,打印机驱动中的默认纸张类型和打印首选项中的纸张类型也许不一样,不用这句this.crystalReportViewer1.ReportSource = myreport; // 生成报表Printbutton.Enabled = true;}}private void buttonPrint_Click(object sender, EventArgs e){myreport.PrintToPrinter(1, false, 0, 0);}private void SearchCustbutton_Click(object sender, EventArgs e){string inputName = textBoxCustName.Text.Replace(" ","");if (inputName.Count() > 1){listBoxCustomers.Items.Clear(); //清除列表里面已经有的项,防止重复显示datasetForCustList.Clear(); //清空内存中的客人列表数据集中的数据,防止重复添加OleDbDataAdapter dataAdapterGetnewCus = new OleDbDataAdapter("SELECT 姓名,公民身份号码,CStr(读取时间) as 读取时间FROM 身份证信息where 姓名like '%"+ inputName +"%' or 公民身份号码='" +inputName+ "'", localConnectStr);dataAdapterGetnewCus.Fill(datasetForCustList);foreach (DataRow dr in datasetForCustList.Tables[0].Rows){listBoxCustomers.Items.Add(dr[0].ToString() + " " + dr[1].ToString() + " " + dr[2].ToString());listBoxCustomers.Items.Add("\r\n"); //添加回车换行符}}else{MessageBox.Show("请输入正确的查询信息!");}}}}。
创建简单水晶报表步骤1:打开VS工具,新建解决方案和项目2:先创建一个一个ds文件,在ds文件中添加一个datatable,并添加需要显示的列(此处的列和你从数据库中查询出来的字段名称相同),右击属性,选择相应字段的相应类型3:创建水晶报表文件(rptShow)选择标准- 在项目数据中找到刚刚创建好的数据集,并选择相应的datatable至右面的文本框中,点击完成,创建好报表文件。
5-1:在我做的报表文件中主要遇到的一个困难是求和;所以这里特别记录下1:新建【运行总计字段】并取名,这里设计名称为:Sum_Qty从报表字段中选择需要求和的字段,在汇总类型中选择和即可,此种方法为其一,还有一种方法则是建立好名称后,在公式工作室选择公式--→函数-→选择需要的函数并把相应的字段填充进去,我这里需要的是数量的求和,所以,选择好后是Sum(Qty) 即可,然后直接把之前创建好的名称放在报表文件中。
2:求和不同类型的数据,则需要进行判断,在我的数据库中有金和石两种数据,所以我要对石和金进行统计并求和。
同样需要创建运行总计字段,Sum_Qty,进入到公式工作室,找到刚刚创建好的运行总计字段名称(Sum_Qty),在右面的空白处写上判断格式:if UOM=’G’ then金的重量字段4:调整好相应的格式,再新建一个项目文件(这里是针对winform程序,web的我还没试过,等试了再写)5:在form表单中拉近一个报表显示控件,如图:6:编写代码实现报表的显示:Dim rpt As New rptDetails ------rptDetails 指的前文创建的报表文件名称Dim ds As New dsSummary.DeatilsQtyDataTable ------dsSummary(创建的数据集文件,DeatilsQtyDataTable 指的是数据集中,你想要使用的数据表,在此使用时,它会自动加上DataTable后缀,其实代表的就是你数据集中的DeatilsQty)rpt.SetDataSource(DBHelper.GetDetailsSummary(ds, PosCodes, txtFrom.Text.Trim,txtTo.Text.Trim)) -----调用方法(该方法返回的是dataTable类型)Me.rptShowDetails.ReportSource = rpt ---填充报表7:完成,显示效果如图:。