Printing 如何将多个Crystal Report放入一个Crystal Report viewer?

Printing 如何将多个Crystal Report放入一个Crystal Report viewer?,printing,crystal-reports,c#-2.0,Printing,Crystal Reports,C# 2.0,事情是这样的 我编写了一个c应用程序,为每个员工生成每月考勤报告,并提供自己的详细信息 我希望能够为所有员工执行此操作一次,并查看按名称分组的报告 因此,当我从crystal report子树中选择客户名称时,我会得到他的每月出勤报告 我真的不知道如何在crystal report中使用子树。。。有可能做那样的事吗 所有这些的目标是能够一次点击打印所有报告。这并不是你想要的,但我将发布它,因为它可能适合你。在类似的情况下,我也为自己这样做了。对于VB语法也很抱歉 这将允许您使用Crystal r

事情是这样的

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

我真的不知道如何在crystal report中使用子树。。。有可能做那样的事吗


所有这些的目标是能够一次点击打印所有报告。这并不是你想要的,但我将发布它,因为它可能适合你。在类似的情况下,我也为自己这样做了。对于VB语法也很抱歉

这将允许您使用Crystal reports引擎以PDF格式创建报告。基本上,它允许您使用循环创建多个PDF,然后可以自动打印。导出PDF子系统将文件写入磁盘,然后使用默认的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
末级

我很难让导入显示在这个代码块中,所以这里它们是纯文本的

导入System.IO

导入系统。管理

导入CrystalDecisions。共享

导入System.Runtime.InteropServices


导入CrystalDecisions.CrystalReports.Engine

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

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


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

我认为您可以使用报告查看器,而不在任何地方实际显示报告,因此基本上您可以加载第一份报告、打印报告、加载第二份报告、打印报告等。但我确信有更好的方法可以做到这一点。这就是我为什么要问的原因。。我需要一个优化的解决方案,因为我有很多员工感谢Mana在重新阅读了你的问题后,我现在不确定我提出的解决方案是否是你想要的,但我将保留它以防万一。无意冒犯,但此代码与他问的问题无关。我讨厌人们在邮件上写文章。虽然代码本身是好代码,但它与回答问题无关。