我有一个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执行此操作?
提前感谢您的协助 .
2 回答
水晶报表查看器本身不提供此功能 .
要在没有对话框弹出窗口的情况下控制页面数,您必须使用
CrystalDecisions.CrystalReports.Engine.ReportDocument
类 . 此类是CrystalReports API用于表示实际Crystal Report的类,通常将其分配给查看器的ReportSource
属性,以告知查看器要显示的报告 . 您可能已经在使用此对象,但我无法从您共享的代码中看到您分配报告源的位置 .ReportDocument
类有PrintToPrinter
方法,第二个重载如下所示:void PrintToPrinter(int nCopies, bool collated, int startPageN, int endPageN)
nCopies
参数允许您指定要打印的报告的副本数 . 报告的打印设置将默认为报告的打印机设置,但可以通过ReportDocument
实例的PrintOptions
属性进行更改 .这是一个简单的代码示例,其中rptPath是Crystal报表的路径:
此外,当ReportDocument用于通过Load()方法加载Crystal Report时,它会自动使用报表所需的所有参数填充其ParameterFields集合 . 然后,您可以设置参数的值,如显示的红色:
最后,如果要向查看者显示此报告,您只需执行以下操作:
其中
rpt
是表示报告的ReportDocument
对象,而查看者是您希望用于显示报告的CrystalDecisions.Windows.Forms.CrystalReportViewer
.通过将代码后面的变量传递给cr report参数:
可能是这样的:
有关详细信息,请参阅link