水晶报表编程及问题总结
水晶报表编程及问题总结
1.怎么让组页眉,在同一组中每一页都显示
插入组的时候,在公用选项页面选中“在每个页面上重复组页眉”
2.如何向 CrystalReportViewer 和 ReportDocument 传递参数……
一、CrystalReportViewer
通过 CrystalReportViewer.ParameterFieldInfo 属性……
1、crystalreportviewer 成员
公共实例属性
ParameterFieldInfo(从 CrystalReportViewerbase 继承) ParameterFields。获取或设置参数字段集合。
二、reportdocument
通过 ReportDocument.DataDefinition.ParameterFields 属性……
1、reportdocument 成员
公共实例属性
DataDefinition DataDefinition。获取 DataDefinition 对象。
2、datadefinition 成员
公共实例属性
ParameterFields ParameterFieldDefinitions。获取 ParameterFieldDefinitions 集合。
三、参数字段运行时自定义(crystalreportviewer)
参考:
设置参数 | Windows 窗体查看器的绑定选项 | Web 窗体查看器的绑定选项
可支持用户在 Crystal 报表中通过参数进行输入。这种参数有多种用途。例如:
使参数基于数据库字段并允许用户指定该字段的值,以便对报表中的数据进行筛选。
使用参数字段将条件格式应用于报表。
使用参数字段来定义排序顺序。
下列示例说明如何在运行时通过代码设置参数字段值。此例解释了如何设置两个不同的参数:第一个是多值离散参数,第二个是区域值参数。
在运行时修改参数字段
[c#]
// 声明将参数传递给
//查看器控件所需的变量。
ParameterFields paramFields = new ParameterFields ();
ParameterField paramField = new ParameterField ();
ParameterDiscreteValue discreteVal = new ParameterDiscreteValue ();
ParameterRangeValue rangeVal = new ParameterRangeValue ();
// 第一个参数是具有多个值的离散参数。
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField.ParameterFieldName = "客户姓名";
// 设置第一个离散值并将其传递给该参数。
discreteVal.Value = "AIC Childrens";
paramField.CurrentValues.Add (discreteVal);
// 设置第二个离散值并将其传递给该参数。
// discreteVal 变量被设置为新值,这样,以前的设置
//就不会被覆盖。
discreteVal = new ParameterDiscreteValue ();
discreteVal.Value = "Aruba Sport";
paramField.CurrentValues.Add (discreteVal);
// 将该参数添加到参数字段集合。
paramFields.Add (paramField);
// 第二个参数为区域值。paramField 变量
//被设置为新值,这样,以前的设置就不会被覆盖。
paramField = new ParameterField ();
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField.ParameterFieldName = "客户 ID";
// 设置范围的开始值和结束值并将该范围传递给
//该参数。
rangeVal.StartValue = 42;
rangeVal.EndValue = 72;
paramField.CurrentValues.Add (rangeVal);
// 将第二个参数添加到参数字段集合。
paramFields.Add (paramField);
// 将参数字段集合放入查看器控件。
crystalReportViewer1.ParameterFieldInfo = paramFields;
更多资料请查看:http://www.devedu.com/develop/2005-4-8/12305/default.aspx
3.设置Crystal Report Viewer 的外观
设置 Crystal Report Viewer 的属性:
BestFitPage 布尔值。获取或设置页面视图是大小合适还是用滚动条进行裁剪。
这个地方设为false后,设置Crystal Report Viewer 的宽度就可以去除滚动条了。
说明 :目前有两种情况,其中在从 Web 窗体查看器进行打印时会出现问题:
BestFitPage属性为默认值“真”(即,没有垂直或水平滚动条),但PageZoomFactor大于 100。
BestFitPage 设置为“假”,Web 窗体查看器的高度小于报表页的高度(即,有垂直滚动条),而查看器的宽度大于或等于报表页的宽度(即,没有水平滚动条)。
配合设置 Width、Height 来实现无空白和无滚动条的显示!
DisplayGroupTree 布尔值。获取或设置树视图是可见还是隐藏。
DisplayPage 布尔值。获取或设置工具栏是可见还是隐藏。
DisplayToolbar 布尔值。获取或设置工具栏上的转到页按钮是可见还是隐藏。
PageZoomFactor Int32。获取或设置报表的缩放因数。
SeparatePages 布尔值。获取或设置报表页是分开还是连接。
PageToTreeRatio Float64。设置组树与报表视图之间的大小比例。
4.控制工具栏的按钮:
设置 Crystal Report Viewer 的属性:
HasGotoPageButton 布尔值。获取或设置转到页按钮的可见性。
HasLevelUpButton 布尔值。获取或设置工具栏上的转到上一页按钮是可见还是隐藏。
HasPageNavigationButtons 布尔值。获取或设置工具栏上的页面导航按钮是可见还是隐藏。
HasRefreshButton 布尔值。获取或设置工具栏上的刷新按钮是可见还是隐藏。
HasSearchButton 布尔值。获取或设置工具栏上的搜索按钮是可见还是隐藏。
HasZoomFactorList 布尔值。获取或设置工具栏上的缩放因数列表是可见还是隐藏。
5.在 Web 页面里的布局:
在“设计视图”,修改 CrystalReportViewer 的 Width、Height 属性。
切换到窗体的“HTML 视图”,修改 style 属性。
<CR:CrystalReportViewer id="CrystalReportViewer1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server" Width="350px" Height="50px" EnableDrillDown="False" DisplayGroupTree="False"></CR:CrystalReportViewer>
6.除水晶报表的的公司LOGO
将 Crystal 公司的Logo 文件替换或删除……
(1)如果是用 VS.NET 里自带的水晶报表
C:\Program Files\Microsoft Visual Studio .NET\Crystal Reports\Viewers\images\ToolBar\logo.gif
(2)如果是用水晶报表 9.2
C:\Program Files\Common Files\Crystal Decisions\2.0\crystalreportviewers\images\toolbar\crlogo.gif
7.替换水晶报表里的各种图标和图片
(1)如果是用 VS.NET 里自带的水晶报表
C:\Program Files\Microsoft Visual Studio .NET\Crystal Reports\Viewers\images
(2)如果是用水晶报表 9.2
C:\Program Files\Common Files\Crystal Decisions\2.0\crystalreportviewers\images
8.关于打印的时候安装插件:
在 Crystal Reports 的更新版本中,您可以使用新的 CrystalReportViewer.PrintMode 属性来指定打印模式。其中包含两个选择项:ActiveX 和 PDF。
当属性设置为PrintMode.PDF 时,报表会在WEB服务器上导出为PDF,然后以数据流传送到浏览器,使用者可以利用选项,直接打印到打印机。这个选项是跨平台相容的。
当属性设置为PrintMode.ActiveX时,ActiveX 打印控制项允许使用者将报表直接打印到本地打印机
先下载 http://support.businessobjects.com/CRforVS2005/PrintControl.cab,放到自已的服务器上。
若要在 Crystal Reports for Visual Studio 2005 网站显示 cab 包,需将下列 xml 语句加入网站的 web.config 文件(必须加到<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">之后,也就是最前面):
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="printControl" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null"/>
</sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
<crystalReports>
<printControl>
<add key="url" value="http://192.168.88.91/PrintControl.cab"/> --这里改为.CAB包所在地址
</printControl>
</crystalReports>
</businessObjects>
注意:只有 Internet Explorer 才会支持 ActiveX 模式。若从非 Internet Explorer 的浏览器 (FireFox、Safari、Mozilla 等) 打印,将会恢复到 PDF 弹出对话框。
然后在打印的页面或直接在主窗体添加一个层,并在层中添加如下代码(可以采用其他方式)
<object id="CrystalPrintControl" classid="CLSID:BAEE131D-290A-4541-A50A-8936F159563A"
codebase="http://192.168.88.91/printcontrol.cab" height="0px" version="10,2,0,1078"
viewastext="" width="0px">
</object>
version是版本号,如果你是其他的版本将版本号修改一下即可。
9.已达到系统管理员配置的最大报表处理作业数限制的处理
解决办法:
具体为修改下面两个键的值。
HKEY_LOCAL_MACHINE; SOFTWARE; Crystal Decisions; 10.0; Report Application
Server; InprocServer; PrintJobLimit 修改为1000
还有一个HKEY_LOCAL_MACHINE; SOFTWARE; Crystal Decisions; 10.0; Report Application
Server; Server; PrintJobLimit 也修改为1000
我发现在C:\WINDOWS\Temp这个临时文件里面有大量的水晶报表文件,每使用一次就会生成几个文件,在电脑没有重新启动的情况下它不会被删除,而出现大量的无用文件,在google里面搜了一圈发现也有人碰到这样的情况但回答的很模糊只是说要将水晶报表装载的文档关闭掉,从这里可以看出出现这样的错误应该是程序员人为照成的.
具体解决如下:
1.ReportDocumen实例必须为类成员
private ReportDocument prtp = new ReportDocument();
2.使用完水晶报表必须关闭文件,这样子就不会在windows的临时文件里面产生.
private void Page_Unload(object sender, EventArgs e)
{
prtp.Dispose();
}
Page_Unload 事件是在页面完全显示的时候运行,这样子就解决了.
插入组的时候,在公用选项页面选中“在每个页面上重复组页眉”
2.如何向 CrystalReportViewer 和 ReportDocument 传递参数……
一、CrystalReportViewer
通过 CrystalReportViewer.ParameterFieldInfo 属性……
1、crystalreportviewer 成员
公共实例属性
ParameterFieldInfo(从 CrystalReportViewerbase 继承) ParameterFields。获取或设置参数字段集合。
二、reportdocument
通过 ReportDocument.DataDefinition.ParameterFields 属性……
1、reportdocument 成员
公共实例属性
DataDefinition DataDefinition。获取 DataDefinition 对象。
2、datadefinition 成员
公共实例属性
ParameterFields ParameterFieldDefinitions。获取 ParameterFieldDefinitions 集合。
三、参数字段运行时自定义(crystalreportviewer)
参考:
设置参数 | Windows 窗体查看器的绑定选项 | Web 窗体查看器的绑定选项
可支持用户在 Crystal 报表中通过参数进行输入。这种参数有多种用途。例如:
使参数基于数据库字段并允许用户指定该字段的值,以便对报表中的数据进行筛选。
使用参数字段将条件格式应用于报表。
使用参数字段来定义排序顺序。
下列示例说明如何在运行时通过代码设置参数字段值。此例解释了如何设置两个不同的参数:第一个是多值离散参数,第二个是区域值参数。
在运行时修改参数字段
[c#]
// 声明将参数传递给
//查看器控件所需的变量。
ParameterFields paramFields = new ParameterFields ();
ParameterField paramField = new ParameterField ();
ParameterDiscreteValue discreteVal = new ParameterDiscreteValue ();
ParameterRangeValue rangeVal = new ParameterRangeValue ();
// 第一个参数是具有多个值的离散参数。
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField.ParameterFieldName = "客户姓名";
// 设置第一个离散值并将其传递给该参数。
discreteVal.Value = "AIC Childrens";
paramField.CurrentValues.Add (discreteVal);
// 设置第二个离散值并将其传递给该参数。
// discreteVal 变量被设置为新值,这样,以前的设置
//就不会被覆盖。
discreteVal = new ParameterDiscreteValue ();
discreteVal.Value = "Aruba Sport";
paramField.CurrentValues.Add (discreteVal);
// 将该参数添加到参数字段集合。
paramFields.Add (paramField);
// 第二个参数为区域值。paramField 变量
//被设置为新值,这样,以前的设置就不会被覆盖。
paramField = new ParameterField ();
// 设置参数字段的名称,它必须
//和报表中的参数相符。
paramField.ParameterFieldName = "客户 ID";
// 设置范围的开始值和结束值并将该范围传递给
//该参数。
rangeVal.StartValue = 42;
rangeVal.EndValue = 72;
paramField.CurrentValues.Add (rangeVal);
// 将第二个参数添加到参数字段集合。
paramFields.Add (paramField);
// 将参数字段集合放入查看器控件。
crystalReportViewer1.ParameterFieldInfo = paramFields;
更多资料请查看:http://www.devedu.com/develop/2005-4-8/12305/default.aspx
3.设置Crystal Report Viewer 的外观
设置 Crystal Report Viewer 的属性:
BestFitPage 布尔值。获取或设置页面视图是大小合适还是用滚动条进行裁剪。
这个地方设为false后,设置Crystal Report Viewer 的宽度就可以去除滚动条了。
说明 :目前有两种情况,其中在从 Web 窗体查看器进行打印时会出现问题:
BestFitPage属性为默认值“真”(即,没有垂直或水平滚动条),但PageZoomFactor大于 100。
BestFitPage 设置为“假”,Web 窗体查看器的高度小于报表页的高度(即,有垂直滚动条),而查看器的宽度大于或等于报表页的宽度(即,没有水平滚动条)。
配合设置 Width、Height 来实现无空白和无滚动条的显示!
DisplayGroupTree 布尔值。获取或设置树视图是可见还是隐藏。
DisplayPage 布尔值。获取或设置工具栏是可见还是隐藏。
DisplayToolbar 布尔值。获取或设置工具栏上的转到页按钮是可见还是隐藏。
PageZoomFactor Int32。获取或设置报表的缩放因数。
SeparatePages 布尔值。获取或设置报表页是分开还是连接。
PageToTreeRatio Float64。设置组树与报表视图之间的大小比例。
4.控制工具栏的按钮:
设置 Crystal Report Viewer 的属性:
HasGotoPageButton 布尔值。获取或设置转到页按钮的可见性。
HasLevelUpButton 布尔值。获取或设置工具栏上的转到上一页按钮是可见还是隐藏。
HasPageNavigationButtons 布尔值。获取或设置工具栏上的页面导航按钮是可见还是隐藏。
HasRefreshButton 布尔值。获取或设置工具栏上的刷新按钮是可见还是隐藏。
HasSearchButton 布尔值。获取或设置工具栏上的搜索按钮是可见还是隐藏。
HasZoomFactorList 布尔值。获取或设置工具栏上的缩放因数列表是可见还是隐藏。
5.在 Web 页面里的布局:
在“设计视图”,修改 CrystalReportViewer 的 Width、Height 属性。
切换到窗体的“HTML 视图”,修改 style 属性。
<CR:CrystalReportViewer id="CrystalReportViewer1" style="Z-INDEX: 101; LEFT: 8px; POSITION: absolute; TOP: 8px" runat="server" Width="350px" Height="50px" EnableDrillDown="False" DisplayGroupTree="False"></CR:CrystalReportViewer>
6.除水晶报表的的公司LOGO
将 Crystal 公司的Logo 文件替换或删除……
(1)如果是用 VS.NET 里自带的水晶报表
C:\Program Files\Microsoft Visual Studio .NET\Crystal Reports\Viewers\images\ToolBar\logo.gif
(2)如果是用水晶报表 9.2
C:\Program Files\Common Files\Crystal Decisions\2.0\crystalreportviewers\images\toolbar\crlogo.gif
7.替换水晶报表里的各种图标和图片
(1)如果是用 VS.NET 里自带的水晶报表
C:\Program Files\Microsoft Visual Studio .NET\Crystal Reports\Viewers\images
(2)如果是用水晶报表 9.2
C:\Program Files\Common Files\Crystal Decisions\2.0\crystalreportviewers\images
8.关于打印的时候安装插件:
在 Crystal Reports 的更新版本中,您可以使用新的 CrystalReportViewer.PrintMode 属性来指定打印模式。其中包含两个选择项:ActiveX 和 PDF。
当属性设置为PrintMode.PDF 时,报表会在WEB服务器上导出为PDF,然后以数据流传送到浏览器,使用者可以利用选项,直接打印到打印机。这个选项是跨平台相容的。
当属性设置为PrintMode.ActiveX时,ActiveX 打印控制项允许使用者将报表直接打印到本地打印机
先下载 http://support.businessobjects.com/CRforVS2005/PrintControl.cab,放到自已的服务器上。
若要在 Crystal Reports for Visual Studio 2005 网站显示 cab 包,需将下列 xml 语句加入网站的 web.config 文件(必须加到<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">之后,也就是最前面):
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="printControl" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null"/>
</sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
<crystalReports>
<printControl>
<add key="url" value="http://192.168.88.91/PrintControl.cab"/> --这里改为.CAB包所在地址
</printControl>
</crystalReports>
</businessObjects>
注意:只有 Internet Explorer 才会支持 ActiveX 模式。若从非 Internet Explorer 的浏览器 (FireFox、Safari、Mozilla 等) 打印,将会恢复到 PDF 弹出对话框。
然后在打印的页面或直接在主窗体添加一个层,并在层中添加如下代码(可以采用其他方式)
<object id="CrystalPrintControl" classid="CLSID:BAEE131D-290A-4541-A50A-8936F159563A"
codebase="http://192.168.88.91/printcontrol.cab" height="0px" version="10,2,0,1078"
viewastext="" width="0px">
</object>
version是版本号,如果你是其他的版本将版本号修改一下即可。
9.已达到系统管理员配置的最大报表处理作业数限制的处理
解决办法:
具体为修改下面两个键的值。
HKEY_LOCAL_MACHINE; SOFTWARE; Crystal Decisions; 10.0; Report Application
Server; InprocServer; PrintJobLimit 修改为1000
还有一个HKEY_LOCAL_MACHINE; SOFTWARE; Crystal Decisions; 10.0; Report Application
Server; Server; PrintJobLimit 也修改为1000
我发现在C:\WINDOWS\Temp这个临时文件里面有大量的水晶报表文件,每使用一次就会生成几个文件,在电脑没有重新启动的情况下它不会被删除,而出现大量的无用文件,在google里面搜了一圈发现也有人碰到这样的情况但回答的很模糊只是说要将水晶报表装载的文档关闭掉,从这里可以看出出现这样的错误应该是程序员人为照成的.
具体解决如下:
1.ReportDocumen实例必须为类成员
private ReportDocument prtp = new ReportDocument();
2.使用完水晶报表必须关闭文件,这样子就不会在windows的临时文件里面产生.
private void Page_Unload(object sender, EventArgs e)
{
prtp.Dispose();
}
Page_Unload 事件是在页面完全显示的时候运行,这样子就解决了.