尝试使用 crystalreportviewer 使用 vb.net 显示 .rpt

问题描述 投票:0回答:1

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

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

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

有人可以帮我解决这个问题,或者解释一下为什么我遇到了问题吗?没有什么是一致的——我现在很茫然。

非常感谢您的帮助!预先感谢

vb.net crystal-reports
1个回答
0
投票

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

这是 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()
© www.soinside.com 2019 - 2024. All rights reserved.