【问题标题】:Trying to use crystalreportviewer to display .rpt's using vb.net尝试使用 Crystalreportviewer 显示 .rpt 使用 vb.net
【发布时间】:2022-05-07 17:02:30
【问题描述】:

我一直在尝试构建一个简单的 vb.net 应用程序,该应用程序基本上在 Crystalreportviewer 中显示已构建的 .rpt 报告。无论我尝试编写多少次代码,都会遇到问题。一些报告有效,另一些则抛出错误,例如加载报告失败、路径无效等。当我在水晶中运行它们时,所有报告都有效。

理想情况下,我希望只有一个带有报告名称的菜单和一个 Crystalreportviewer,用户可以在其中单击报告,应用程序会提示他们输入参数值。

我相信我目前正在使用 Crystal 9,以及 vs.net 2003,或者我也可以访问 2005。

有人可以帮我解决这个问题,或者解释一下我遇到问题的原因吗?没有什么是一致的 - 我现在不知所措。

非常感谢您的帮助!提前致谢

【问题讨论】:

    标签: vb.net crystal-reports


    【解决方案1】:

    您需要让它们全部在开发环境中工作,然后在客户端,确保安装了依赖文件,并且如果您的代码依赖于它,则网络驱动器名称映射一致。

    这是 VB.NET 2005 中的一个示例:

    Public Class frmCrystal
        Public Sub _init(ByVal windowTitle As String, ByVal rptPath As String)
            Dim rptDoc As CrystalDecisions.CrystalReports.Engine.ReportDocument
            Dim ConInfo As CrystalDecisions.Shared.TableLogOnInfo
            Dim crTables As CrystalDecisions.CrystalReports.Engine.Tables
            Dim crTable As CrystalDecisions.CrystalReports.Engine.Table
    
            Me.Text = windowTitle
            rptDoc = New CrystalDecisions.CrystalReports.Engine.ReportDocument
            rptDoc.Load(rptPath)
            ConInfo = New CrystalDecisions.Shared.TableLogOnInfo
            crTables = rptDoc.Database.Tables
            For Each crTable In crTables
                With ConInfo.ConnectionInfo
                    .ServerName = "dhsdev10069\dsd"
                    .DatabaseName = "DSDWorkPlanTracking"
                    .IntegratedSecurity = True
                End With
                ConInfo.ReportName = rptPath
                crTable.ApplyLogOnInfo(ConInfo)
            Next
    
            rptCrystal.ReportSource = rptDoc
        End Sub
    

    窗体 frmCrystal 包含一个 CrystalReportViewer 控件:

    Private Sub InitializeComponent()
            Me.rptCrystal = New CrystalDecisions.Windows.Forms.CrystalReportViewer
            Me.SuspendLayout()
            '
            'rptCrystal
            '
            Me.rptCrystal.ActiveViewIndex = -1
            Me.rptCrystal.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle
            Me.rptCrystal.DisplayGroupTree = False
            Me.rptCrystal.Dock = System.Windows.Forms.DockStyle.Fill
            Me.rptCrystal.Location = New System.Drawing.Point(0, 0)
            Me.rptCrystal.Name = "rptCrystal"
            Me.rptCrystal.Size = New System.Drawing.Size(292, 273)
            Me.rptCrystal.TabIndex = 0
            '
            'frmCrystal
            '
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
            Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            Me.ClientSize = New System.Drawing.Size(292, 273)
            Me.Controls.Add(Me.rptCrystal)
            Me.Name = "frmCrystal"
            Me.Text = "DSD Report"
            Me.ResumeLayout(False)
    
        End Sub
    End Class
    

    然后要调用表单,您需要以下内容:

    Private _crystal As frmCrystal
    
        _crystal = New frmCrystal
        _crystal.MdiParent = Me
        _crystal._init(windowTitle, rptpath)
        _crystal.WindowState = FormWindowState.Maximized
        _crystal.Show()
    

    【讨论】:

    • 不幸的是,我无法让报告在开发环境中工作。我希望有人可以为此提供基本的工作代码,我可以试一试。
    • VB.NET 的哪个版本?我可以在 2005 年发帖
    • 嗨 Beth,我把这段代码放到了 vs 2005 中的新表单中,添加了一个 CrytalReportViewer 控件并将其重命名为 rptCrystal - 它编译正常,但是当我运行它时它什么也没做.我错过了什么吗?再次感谢您的帮助
    • 是的,您需要使用您的报告路径调用它。请。见编辑。
    • 嗨,贝丝,再次感谢您的帮助。这听起来可能很愚蠢,但我仍然不明白。我复制了那个新代码,它说 _crystal 没有声明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多