我一直在尝试构建一个简单的 vb.net 应用程序,它基本上在 crystalreportviewer 中显示已构建的 .rpt 报告。无论我尝试编写多少次代码,我都会遇到问题。一些报告有效,其他报告抛出错误,例如加载报告失败、路径无效等。当我在 crystal 中运行它们时,所有报告都有效。
理想情况下,我希望只有一个包含报告名称的菜单和一个 crystalreportviewer,用户可以在其中单击报告,并且应用程序会提示他们输入参数值。
我目前正在使用 crystal 9,我相信还有 vs.net 2003,或者我也可以访问 2005。
有人可以帮我解决这个问题,或者解释一下为什么我遇到了问题吗?没有什么是一致的——我现在很茫然。
非常感谢您的帮助!预先感谢
您需要让它们全部在开发环境中工作,然后在客户端,确保安装了依赖文件,并且如果您的代码依赖于它,则网络驱动器名称映射一致。
这是 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()