【问题标题】:How can i put more than one Crystal Report into one Crystal Report viewer ?如何将多个 Crystal Report 放入一个 Crystal Report 查看器?
【发布时间】:2011-05-30 20:14:32
【问题描述】:

所以事情就是这样..

我编写了一个 c# 应用程序来为每个员工生成每月的考勤报告,其中包含他自己的详细信息 我希望能够为所有员工执行一次此操作并查看按名称分组的报告 所以当我从水晶报告子树中选择客户名称时,我会得到他的每月出勤报告

我真的不知道如何在水晶报表中使用子树......有可能这样吗?


所有这些的目标是能够一键打印所有报告

【问题讨论】:

  • 我认为您可以使用报告查看器而不实际显示它,所以基本上您可以加载第一个报告,打印它,加载第二个报告,打印它等等。但我确定在那里是一种更好的方法。
  • 这就是为什么我要问.. 我需要一个优化的解决方案,因为我有很多员工,谢谢伙计

标签: printing crystal-reports c#-2.0


【解决方案1】:

这不是您所要求的,但我将发布它,因为它可能对您有用。我在类似的情况下为我做了。也对 VB 语法感到抱歉

这将允许您使用 Crystal Reports 引擎将报表创建为 PDF。基本上,它允许您使用循环创建多个 PDF,然后可以自动打印。Export PDF Sub 会将文件写入磁盘,然后使用默认的 pdf 阅读器打开它。打印 PDF 功能将自动打印保存到磁盘的 PDF 文件。这不是一个完美的解决方案,但我希望它至少能让你更接近你想要完成的目标。

公开课 PDFCR

Private Const SW_SHOWNORMAL As Integer = 2
<DllImport("shell32")> _
Public Shared Function ShellExecute(ByVal hWnd As IntPtr, _
                                    ByVal lpOperation As String, _
                                    ByVal lpFile As String, _
                                    ByVal lpParameters As String, _
                                    ByVal lpDirectory As String, _
                                    ByVal nShowCmd As Integer) As IntPtr
End Function

Public Shared Sub ExportPDF(ByVal crDOC As ReportDocument, ByVal FilePath As String)
    Dim CrExportOptions As ExportOptions
    Dim CrDiskFileDestinationOptions As New DiskFileDestinationOptions()
    Dim CrFormatTypeOptions As New PdfRtfWordFormatOptions()
    CrDiskFileDestinationOptions.DiskFileName = FilePath
    CrExportOptions = crDOC.ExportOptions
    CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile
    CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat
    CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions
    CrExportOptions.FormatOptions = CrFormatTypeOptions
    crDOC.Export()
    Process.Start(FilePath)
End Sub

Public Shared Function PrintPDF(ByVal FilePath As String) As Boolean
    If IO.File.Exists(FilePath) Then
        If ShellExecute(CType(1, IntPtr), "Print", FilePath, "", _
        Directory.GetDirectoryRoot(FilePath), SW_SHOWNORMAL).ToInt32 <= 32 Then
            Return False
        Else
            Return True
        End If
    Else
        Return False
    End If
End Function

结束类

我无法让 Imports 在此代码块中显示,所以这里它们是纯文本。

导入 System.IO

导入 System.Management

导入 CrystalDecisions.Shared

导入 System.Runtime.InteropServices

导入 CrystalDecisions.CrystalReports.Engine

【讨论】:

  • 重新阅读您的问题后,我现在不确定我提出的解决方案是否是您正在寻找的解决方案,但我将保留它以防万一。
  • 无意冒犯,但这段代码与他的要求无关。我讨厌人们“关闭”一个帖子。虽然代码本身是好代码,但它与回答问题无关。
【解决方案2】:

如果您在员工姓名字段的报告中添加 GROUP,这将(默认情况下)创建您正在查找的组树。

从那里,代码方面,它可以被关闭,但如果您的报告中有任何组,则默认情况下您应该会看到组树。

问题似乎在于报告没有按员工姓名分组。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 2011-06-27
    • 1970-01-01
    • 2016-03-23
    相关资源
    最近更新 更多