我有一个C#应用程序,它在表单中有一个Crystal Report Viewer。我调用该表单并传递给我一个值,用于更新与Crystal Report关联的参数字段,以便只显示特定记录。
一切正常,我可以调用Viewers PrintReport方法打印报告,无需操作员干预。
CrystalForm fs = new CrystalForm();
fs.SetCrystalOrderNumParameter(ItemID);
public partial class CrystalForm : Form
{
public CrystalForm()
{
InitializeComponent();
}
public void SetCrystalOrderNumParameter(string ItemID)
{
ParameterFields paramFields = new ParameterFields();
ParameterField paramField = new ParameterField();
ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();
paramField.Name = "ItemID";
paramDiscreteValue.Value = ItemID;
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);
crystalReportViewer1.ParameterFieldInfo = paramFields;
crystalReportViewer1.PrintReport();
}
}
我遇到的问题是我希望能够将值传递给Crystal Report,以便它使用此#来确定应该打印多少份报告。
有没有办法使用Crystal Report Viewer执行此操作?
提前感谢您的协助。
答案 0 :(得分:1)
水晶报表查看器本身不提供此功能。
要在没有弹出对话框的情况下控制页数,您必须使用<div ng-repeat="step in steps">
<form name="stepForm[{{$index}}]" novalidate>
<div class="row">
<div class="col s6" ng-repeat="f in step.schema.fields track by $index" ng-cloak>
//divide into two , rows only contain two controls
</div>
</div>
</form>
</div>
类。此类是CrystalReports API用于表示实际Crystal Report的类,通常将其分配给查看器的CrystalDecisions.CrystalReports.Engine.ReportDocument
属性,以告知查看器要显示的报告。您可能已经在使用此对象,但我无法看到您从已共享的代码中分配报告源的位置。
ReportSource
类有ReportDocument
方法,第二个重载如下:PrintToPrinter
void PrintToPrinter(int nCopies, bool collated, int startPageN, int endPageN)
参数允许您指定要打印的报告的副本数。报告的打印设置将默认为报告的打印机设置,但可以通过nCopies
实例的PrintOptions
属性进行更改。
这是一个简单的代码示例,其中rptPath是水晶报告的路径:
ReportDocument
此外,当使用ReportDocument通过Load()方法加载Crystal Report时,它会自动使用报表所需的所有参数填充其ParameterFields集合。然后,您可以设置参数的值,如显示的红色:
var rpt = new ReportDocument();
rpt.Load(rptPath);
rpt.PrintOptions.PrinterName = "MyPrinterName";
//This will print 2 copies of the crystal report.
//You can use the nCopies (first) parameter to specify whatever #
//of copies you wish.
rpt.PrintToPrinter(2, false, 0, 0);
最后,如果您想要与查看者一起显示此报告,您只需执行以下操作:
rpt.SetParameterValue("ParameterName", value);
其中viewer.ReportSource = rpt;
是表示报告的rpt
对象,而查看者是您希望用来显示报告的ReportDocument
。
答案 1 :(得分:0)
通过将代码后面的变量传递给cr report参数:
可能是这样的:
CRPT.SetParameterValue("syear", Servercls.year);
CRPT.SetParameterValue("smonth", Servercls.month);
CRPT.SetParameterValue("sday", Servercls.day);
有关详细信息,请参阅此link