在我的C#中打印没有显示打印选项对话框Crystal Report Viewer

时间:2017-02-28 16:40:09

标签: c# crystal-reports

我有一个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 个答案:

答案 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