【问题标题】:Printing w/o displaying Print Option Dialog Box Crystal Report Viewer in my C#在我的 C# 中打印不显示打印选项对话框 Crystal Report Viewer
【发布时间】:2017-02-28 16:40:08
【问题描述】:

我有一个 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 做到这一点?

提前感谢您的帮助。

【问题讨论】:

    标签: c# crystal-reports


    【解决方案1】:

    水晶报表查看器本身不提供此功能。

    要控制不弹出对话框的页数,您必须使用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 是水晶报表的路径:

    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);
    

    此外,当 ReportDocument 用于通过 Load() 方法加载 Crystal 报表时,它会自动使用报表所需的所有参数填充其 ParameterFields 集合。然后您可以设置参数的值,如显示的红色:

    rpt.SetParameterValue("ParameterName", value);
    

    最后,如果您想在查看器中显示此报告,您只需执行以下操作:

    viewer.ReportSource = rpt;
    

    其中rpt 是代表报告的ReportDocument 对象,查看器是您希望用于显示报告的CrystalDecisions.Windows.Forms.CrystalReportViewer

    【讨论】:

    • 布兰登感谢您回答我的问题。我将 Crystal Report 关联到 CrystalReportView 的方式是,在将 CrystalReportView 组件拖到表单后,单击表单右上角出现的箭头,然后会显示一个属性对话框,允许我选择要使用的外部 Crystal 报表。
    • 嗯,如果您在 SetCrystalOrderNumParameter 函数中设置断点,并检查报表查看器的 ReportSource 属性,它是否包含 ReportDocument 对象?也许您可以从源中检索文档并在其上调用 PrintToPrinter?
    • 我不熟悉使用 Visual Studio Designer 设置/显示水晶报表。抱歉,我无法在这方面提供更多帮助。
    • 无论如何谢谢。我想出了如何将 CrystalReportDocument 合并到我的应用程序中。现在我必须弄清楚如何更改除了要打印的页数之外的一些打印机选项设置。
    • PrintOptions 属性包含报表的所有打印机设置。或者,您可以使用接受 PrinterSettings 和 PageSettings 作为参数的 PrintToPrinter 的重载。
    【解决方案2】:

    通过将变量从后面的代码传递给 cr 报告参数:

    可能是这样的:

    CRPT.SetParameterValue("syear", Servercls.year);
    CRPT.SetParameterValue("smonth", Servercls.month);
    CRPT.SetParameterValue("sday", Servercls.day);
    

    查看link了解更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 2013-04-05
      相关资源
      最近更新 更多