我一直在尝试构建一个简单的vb.net应用程序,它基本上在crystalreportviewer中显示已经构建的.rpt报告。无论我尝试编码多少次,我都会遇到问题。有些报告有效,有些报告错误,例如加载报告失败,路径无效等等。当我在水晶中运行它们时,所有报告都有效。
理想情况下,我希望只有一个包含报告名称的菜单,以及一个用户可以点击报告的crystalreportviewer,应用程序会提示他们输入参数值。
我目前正在使用水晶9,我相信和vs.net 2003,或者我也可以访问2005年。
有人可以帮我解决这个问题,还是解释我遇到问题的原因?没有什么是一致的 - 我现在不知所措。
非常感谢帮助!!提前谢谢
答案 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()