水晶报表是一个功能强大的报表工具
水晶报表的基本使用方法

水晶报表的基本使用方法水晶报表是一种用于数据分析和可视化的工具,它可以帮助用户更好地理解和展示数据。
在使用水晶报表时,我们需要掌握一些基本的使用方法,以便能够灵活运用它的功能。
下面将介绍水晶报表的基本使用方法。
我们需要了解水晶报表的界面。
水晶报表的界面通常由菜单栏、工具栏、报表区域和数据源区域组成。
菜单栏包含了各种功能选项,可以通过点击菜单栏上的选项来进行相应的操作。
工具栏中则提供了一些常用的工具按钮,方便我们快速进行操作。
报表区域是我们设计和展示报表的主要区域,我们可以在这里对报表进行编辑和预览。
数据源区域则是用于连接数据源和导入数据的区域。
在开始设计报表之前,我们首先需要连接数据源。
水晶报表支持多种数据源的连接,包括数据库、Excel文件、文本文件等。
我们可以通过点击数据源区域中的相应按钮来选择并连接数据源。
连接成功后,我们就可以在数据源区域中看到已连接的数据表。
接下来,我们可以开始设计报表了。
水晶报表提供了丰富的报表设计功能,可以满足各种需求。
我们可以通过拖拽字段到报表区域来选择需要展示的数据,并可以对数据进行排序、筛选、分组等操作。
在报表区域中,我们可以选择不同的报表类型,如表格、柱状图、折线图等,来展示数据。
我们还可以对报表进行样式设置,如调整字体、颜色、边框等,以使报表更加美观。
除了基本的报表设计功能,水晶报表还提供了一些高级功能,如参数设置、公式计算、数据透视等。
参数设置可以让用户在使用报表时输入参数,以实现动态查询和筛选数据的目的。
公式计算可以用于对数据进行复杂的计算和分析。
数据透视可以帮助我们对大量数据进行汇总和分析,以便更好地理解数据。
在设计完报表后,我们可以对报表进行预览和输出。
水晶报表可以生成多种输出格式,如PDF、Excel、HTML等,我们可以根据需要选择相应的输出格式。
在预览报表时,我们可以查看报表的实际效果,并可以进行调整和修改。
在输出报表时,我们可以选择输出的范围和文件名,并可以设置一些输出选项,如是否包含页眉页脚、是否自动换页等。
水晶报表的基本使用方法

水晶报表的基本使用方法水晶报表是一种数据可视化工具,可以帮助用户更直观、清晰地呈现数据。
使用水晶报表可以轻松创建各种类型的报表,包括数据表格、图表、交叉表等。
本文将介绍水晶报表的基本使用方法。
一、创建报表在水晶报表软件中,可以通过多种方式创建报表。
最常用的方法是使用向导或模板来创建报表。
用户可以根据需要选择不同的报表类型和样式,然后按照向导的指引逐步完成报表的设计和设置。
二、导入数据在创建报表之前,首先需要导入数据。
水晶报表支持多种数据源,包括数据库、Excel表格、文本文件等。
用户可以选择合适的数据源,并根据需要设置数据连接参数。
导入数据后,可以对数据进行预处理,如筛选、排序、分组等操作。
三、设计报表在导入数据后,可以开始设计报表的布局和样式。
水晶报表提供了丰富的设计工具和功能,可以轻松创建各种类型的报表。
用户可以选择合适的数据字段,并根据需要设置字段的显示格式、计算公式等。
此外,还可以添加标题、页眉、页脚等元素,以及设置报表的背景、字体、颜色等样式。
四、创建数据透视表水晶报表还支持创建数据透视表,可以帮助用户更好地分析和汇总数据。
用户可以选择需要分析的字段和计算方式,然后根据需要进行数据透视表的设置和调整。
通过数据透视表,可以快速生成汇总表、交叉表等报表,并进行数据筛选、排序、分组等操作。
五、添加图表水晶报表提供了丰富的图表类型,包括柱状图、折线图、饼图等。
用户可以根据需要选择合适的图表类型,并将数据字段拖拽到图表中进行数据分析和展示。
通过设置图表的样式、颜色、标签等属性,可以使报表更加直观、易于理解。
六、设置报表参数在设计报表过程中,还可以设置报表的参数,以便用户在查看报表时进行灵活的数据筛选和分析。
用户可以添加参数字段,并设置参数的类型、默认值、取值范围等属性。
通过参数设置,可以实现报表的动态筛选和交互式操作。
七、导出报表完成报表设计后,可以将报表导出为不同的格式,如PDF、Excel、Word等。
Java水晶报表

报表开ቤተ መጻሕፍቲ ባይዱ示例
CRConfig.xml
Installer Path\Business Objects\Common\4.0\java <Classpath>E:\Program Files\Business Objects\Common\4.0\java/lib/crlovmanifest.jar;E:\Program Files\Business Objects\Common\4.0\java/lib/CRLOVExternal.jar;E:\Program Files\Business Objects\Common\4.0\java/lib/CRDBJDBCServer.jar;E:\Program Files\Business Objects\Common\4.0\java/lib/CRDBXMLServer.jar;E:\Program Files\Business Objects\Common\4.0\java/lib/CRDBJavaBeansServer.jar;E:\Program Files\Business Objects\Common\4.0\java/lib/external/CRDBXMLExternal.jar;E:\Program Files\Business Objects\Common\4.0\java/lib/external/log4j.jar;E:\Program Files\Business Objects\Common\4.0\java/lib/CRDBSForceServer.jar;E:\Program Files\Business Objects\Common\4.0\java/lib/external/CRDBSForceExternal.jar;E:\oracle\ora921\jdbc \lib\ojdbc14.jar;E:\oracle\ora921\jdbc\lib\classes12.jar;${CLASSPATH} </Classpath> <JDBCURL>jdbc:oracle:thin:@HostName:Port:SID</JDBCURL> <JDBCClassName>oracle.jdbc.driver.OracleDriver</JDBCClassName> <JDBCUserName>scott</JDBCUserName>
水晶报表在成本管理系统中的应用

水晶报表在成本管理系统中的应用【摘要】水晶报表是业内最专业、功能最强的报表系统。
它能够大大降低数据报表开发的复杂度,以其强大、易用的功能备受开发人员的青睐。
本文以成本管理系统作为实例介绍如何使用水晶报表实现数据的显示和制作报表。
【关键词】水晶报表;成本管理系统;数据库连接成本管理系统专门处理采用计划成本核算的材料成本,计划成本法的物料通过该系统录入计划价调价单,以调整计划单价。
可查询、修改、审核计划调价单,并查询计划成本法物料的历史计划价格。
1.系统设计本系统采用.NET框架结构,B/S体系结构,IIS6.0的Web服务器软件、SQL Server 2008、采用Visual 内置的CrystalReport水晶报表控件,基于技术的系统的三层结构模型即:表示层、业务层、数据层对实现系统开发。
该系统的报表部分主要包括:施工管段的工程信息以及材料信息报表、施工队的工程信息以及材料信息报表、施工管段的责任预算分解报表、施工队的责任预算分解报表、施工队的验工计价报表、各类责任预算执行报表、施工图工程信息报表、变更索赔报表、各类数量汇总报表、各类管理费报表、每月实际发生费用报表、责任预算汇总报表、验工计价汇总报表、实际费用汇总报表等。
系统数据流图如图1所示。
图1 系统数据流图2.水晶报表的应用在下水晶报表的实现过程中,最重要的是数据的获取。
在拉模式中,数据获取这一步骤是由内置的水晶报表引擎自动处理,不需要编写任何代码。
因此这里主要讨论推模式的实现。
实现过程主要涉及以下两个文件:数据集(.xsd文件)、水晶报表文件(.rpt 文件)。
实现的顺序为:(1)建立数据集文件;(2)建立水晶报表文件;(3)编写填充数据集、设置报表数据源的代码。
给数据集填充数据以及水晶报表显示的关键代码如下:设计完报表,我们就可以运行我们所设计的报表界面。
3.结束语成本管理系统是企业信息系统中重要的组成部分,通过它企业管理这可以有效性的了解成本和控制预算。
水晶报表的介绍

Crystal Reports——被广泛验证过的世界级标准的解决方案——让您根据关系型数据库、OLAP、XML或者其他自定义的数据源设计出灵活的、丰富的报表。Crystal Reports提供了100多个格式化选项,让您可以完全控制数据的访问和表现形式。最终用户可以在报表中进行钻取、对信息进行排序和过滤、打印报表、甚至修改报表以获得所需的信息。您也可以将报表导出为PDF、Excel和Word等格式。在Crystal Reports XI中,引入了包括动态级联在内的多种特性,有助于提高报表的开发效率,减少冗余的报表维护工作,让您可以将精力投入到更加重要的任务上。
水晶报表程序控制上有两种模式,也就是传说中的PULL模式和PUSH模式。口语化点就是拉模式和推模式。
1、拉(PULL)模式:
由水晶报表模板(引擎)直接连接数据库(源),从数据库(源)里拉取数据。就是我们在水晶报表里设置好数据库信息,以及相关的表。 当我们在程序中调用水晶报表引擎,挂载模板后,水晶报表引擎会根据模板里的数据库信息,及表信息主动连接数据库, 返回数据给报表模板,模板根据设计样式进行呈现。
基本流程如下图所示:
2、推(PUSH)模式:
由应用程序从数据库(源)获取数据,然后把数据推送给水晶报表引擎。水晶报表本身不不跟数据库进行交互。
其基本流程图如下:
Java报表组件(JRC)功能的实现与Java SDK的文件:Java的开发者现在可以通过免费下载的Crystal Reports的计划时间表进行更新。请登陆Crystal Reports 2008首页了解更多有关Crystal Reports for Eclipse的最新信息。
C# 水晶报表详细讲解 代码讲解

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. }。
水晶报表

水晶报表水晶报表是一个功能强大的报表工具,现在已经被Microsoft Visual Studio 2005(下文以VS2005简称)集成在一起。
喜欢水晶报表的朋友可以方便使用了。
我把水晶报表在vs2005的使用方法总结一下,供大家参考。
首先介绍一下我用的软件环境:Microsoft Visual Studio 2005;Microsoft SQL Server 2005【数据用例】服务器:SQLEXPRESS数据库名:Test数据库表:T【说明】水晶报表在应用时分两种方法,分别是拉模式(PULL)、推模式(PUSH)。
拉模式:在水晶报表生成时的数据源是从水晶报表文件中的SQL语句从数据库中提取的,在编程时不用重写SQL语句,但要加上登录信息(具体方法,后面介绍)。
推模式:在水晶报表生成时的数据源,是用编程时重写水晶报表中SQL 语句而生成的dataset对像。
也就是说,推模式是用dataset组装水晶报表。
水晶报表组件介绍。
水晶报表在VS2005中有两种组件,在WEB项目是分别是CrystalReportSource,CrystalReportViewer。
在FORM项目里是分别是crystalReport,CrystalReportViewer。
CrystalReportSource,crystalReport是水晶报表的数据提供者;CrystalReportViewer是水晶报表的浏览器。
另外还要介绍一下水的报表的文件是以rpt为扩展名的文件,该文件可以用VS2005生成。
下面分别介绍具体操作方法:拉模式(PULL):在拉模式中如要在水晶报表中的SQL语句加上条件参数时要用{?参数名}方式给出。
例:“Select T1, T2, T3 FROM T Where T1=''{?parm}''” parm就是参数名以下例子中所用到的水晶报表文件中使用的SQL语句是“Select T1, T2, T3 FROM T Where T1=''{?parm}''” parm就是参数名。
水晶报表code128组合函数

水晶报表code128组合函数水晶报表是一种强大的数据分析和报告工具,它可以帮助用户轻松地创建各种类型的报表。
其中,code128组合函数是一种常用的功能,它可以实现对数据进行编码和解码的操作。
本文将介绍code128组合函数的基本用法和应用场景。
code128是一种线性条码标准,广泛用于商品标识、物流追踪和库存管理等领域。
它具有高密度、可靠性强的特点,在水晶报表中使用code128组合函数可以实现对条码数据的生成和解码。
在水晶报表中使用code128组合函数非常简单。
首先,我们需要在报表中创建一个文本框,用于显示条码。
然后,在该文本框中输入code128组合函数的公式。
例如,要生成一个包含数据“12345”的条码,可以使用如下公式:=Code128.Encode("12345")在输入完公式后,按下回车键,水晶报表会自动计算并显示生成的条码。
通过调整文本框的大小和位置,我们可以将条码放置在报表中合适的位置。
除了生成条码,code128组合函数还可以实现对条码数据的解码。
如果我们需要从一个条码中提取出数据,可以使用如下公式:=Code128.Decode("条码数据")在这个公式中,我们需要将待解码的条码数据作为参数传递给code128组合函数。
水晶报表会自动解码并返回提取出的数据。
code128组合函数的应用场景非常广泛。
例如,在仓库管理中,我们可以使用code128组合函数生成每个商品的条码,方便进行库存管理和物流追踪。
在销售管理中,我们可以使用code128组合函数生成产品标识码,方便快速识别和查询产品信息。
此外,在图书馆管理、快递配送等领域,code128组合函数也发挥着重要的作用。
需要注意的是,使用code128组合函数时要确保输入的数据符合code128编码规范。
只有符合规范的数据才能正确生成和解码条码。
在输入数据时,我们可以使用水晶报表的数据验证功能,限制输入的数据类型和长度,以保证数据的准确性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
水晶报表是一个功能强大的报表工具,现在已经被Microsoft Visual Studio 2005(下文以VS2005简称)集成在一起。
喜欢水晶报表的朋友可以方便使用了。
我把水晶报表在vs2005的使用方法总结一下,供大家参考。
首先介绍一下我用的软件环境:Microsoft Visual Studio 2005;Microsoft SQL Server 2005 【数据用例】服务器:SQLEXPRESS数据库名:Test数据库表:T【说明】水晶报表在应用时分两种方法,分别是拉模式(PULL)、推模式(PUSH)。
拉模式:在水晶报表生成时的数据源是从水晶报表文件中的SQL语句从数据库中提取的,在编程时不用重写SQL语句,但要加上登录信息(具体方法,后面介绍)。
推模式:在水晶报表生成时的数据源,是用编程时重写水晶报表中SQL语句而生成的dataset对像。
也就是说,推模式是用dataset 组装水晶报表。
水晶报表组件介绍。
水晶报表在VS2005中有两种组件,在WEB项目是分别是CrystalReportSource,CrystalReportViewer。
在FORM项目里是分别是crystalReport,CrystalReportViewer。
CrystalReportSource,crystalReport是水晶报表的数据提供者;CrystalReportViewer是水晶报表的浏览器。
另外还要介绍一下水的报表的文件是以rpt为扩展名的文件,该文件可以用VS2005生成。
下面分别介绍具体操作方法:拉模式(PULL):在拉模式中如要在水晶报表中的SQL语句加上条件参数时要用{?参数名}方式给出。
例:“Select T1, T2, T3 FROM T Where T1=''{?parm}''” parm就是参数名以下例子中所用到的水晶报表文件中使用的SQL语句是“Select T1, T2, T3 FROM T Where T1=''{?parm}''” parm就是参数名。
【WEB方式下】using CrystalDecisions.Shared;using CrystalDecisions.CrystalReports.Engine;///<summary>///功能:拉模式提取水晶报表///个人主页:////</summary>///<param name="sender"></param>///<param name="e"></param>protected void Button_pull_Click(object sender, EventArgs e){// CrystalReport.rpt是水晶报表文件的名称;CrystalReportSource1是从工具箱加到页面上的水晶报表数据源对像。
CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalRepor t.rpt"));// SetDatabaseLogon 拉模式中必须用这个方法来设置登录信息,参数一:用户名;参数二:密码;参数三:服务器;参数四:数据库名CrystalReportSource1.ReportDocument.SetDatabaseLogon("sa", "123456", @"SYWZSWL\SQLEXPRESS", "Test");//给水晶报表传参数,参数一:是参数名,参数二:参数值;CrystalReportSource1.ReportDocument.SetParameterValue("Title", "这是一个测试报表");CrystalReportSource1.ReportDocument.SetParameterValue("Parm", "1");//绑定水晶报表数据源。
CrystalReportSource1.DataBind();// CrystalReportViewer1是水晶报表浏览器,下面是给该浏览器赋上对像CrystalReportViewer1.ReportSource = CrystalReportSource1;CrystalReportViewer1.DataBind();} 【FORM方式下】//在FORM方式下代码同WEB方式,用crystalReport控件换掉了CrystalReportSource;用crystalReportViewer换掉了CrystalReportViewer;这两个控件都可以在工具箱里找到。
同时在编程时去掉DataBind()方法。
private void Form1_Load(object sender, EventArgs e){crystalReport1.Load(Application.StartupPath + "CrystalReport.rpt");crystalReport1.SetDatabaseLogon("sa", "123456", @"SYWZSWL\SQLEXPRESS", "Test");crystalReport1.SetParameterValue("Title", "这是一个测试报表");crystalReport1.SetParameterValue("Parm", "1");crystalReportViewer1.ReportSource = crystalReport1;}推模式(PUSH):在推模式中编程组装的Dataset里的SQL语句中的字段要与水晶报表里的SQL语句字段一致。
简单的说,推模式中的水晶报表是个模板,把在设计器里报表的格式设好后,再组装DataSet 就可以生成报表了。
【WEB方式下】using CrystalDecisions.Shared;using CrystalDecisions.CrystalReports.Engine;using System.Data.SqlClient;protected void Button_push_Click(object sender, EventArgs e){string sql = "Select T1, T2, T3 FROM T where T1=''a''";string DBConfig_sql =@"Data Source=SYWZSWL\SQLEXPRESS;Initial Catalog=Test;User ID=sa;Password=123456";DataSet ds = new DataSet();SqlConnection sqlCon = new SqlConnection(DBConfig_sql);SqlCommand sqlCmd = new SqlCommand(sql, sqlCon);SqlDataAdapter sqlAd = new SqlDataAdapter();sqlAd.SelectCommand = sqlCmd;sqlAd.Fill(ds, "sql");CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalRepor t.rpt"));//注意此处必需指明Dataset中的表的名称,否则会提示“您请求的报表需要更多信息.”CrystalReportSource1.ReportDocument.SetDataSource(ds.Tables["sql"]);//{?}中的参数可以不用赋值,即使赋了值也不起作用。
// CrystalReportSource1.ReportDocument.ParameterFields["Parm"].CurrentValues.A ddValue("1234567");CrystalReportSource1.ReportDocument.ParameterFields["Title"].CurrentVal ues.AddValue("这时推模式的报表样例!");CrystalReportSource1.DataBind();CrystalReportViewer1.ReportSource = CrystalReportSource1;CrystalReportViewer1.DataBind();}【FORM方式下】private void Form1_Load(object sender, EventArgs e){//推模式string sql = "Select T1, T2, T3 FROM T where T1=''a''";string DBConfig_sql = @"Data Source=SYWZSWL\SQLEXPRESS;Initial Catalog=Test;User ID=sa;Password=123456";DataSet ds = new DataSet();SqlConnection sqlCon = new SqlConnection(DBConfig_sql);SqlCommand sqlCmd = new SqlCommand(sql, sqlCon);SqlDataAdapter sqlAd = new SqlDataAdapter();sqlAd.SelectCommand = sqlCmd;sqlAd.Fill(ds, "sql");crystalReport1.Load(Application.StartupPath + "CrystalReport.rpt");crystalReport1.SetDataSource(ds.Tables["sql"]);//{?}中的参数可以不用赋值,即使赋了值也不起作用。