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

时间:2010-10-07 15:17:26

标签: vb.net crystal-reports

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

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

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

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

非常感谢帮助!!提前谢谢

1 个答案:

答案 0 :(得分: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()