我看到主题并不新鲜,但我搜索了很多网站,发现了许多线索,但没有任何对我有用:(
我在ASP.NET应用程序中使用Crystal Reports Viewer控件。报告很简单,我必须通过两个参数。我的网站上有两个CrystalReportsSource和一个CrystalReportsViewer控件。当页面加载时,我运行此代码片段:
CrystalReportSource1.ReportDocument.SetParameterValue("name", Session["name"].ToString());
CrystalReportSource1.ReportDocument.SetParameterValue("code", Session["code"].ToString());
CrystalReportViewer1.ReportSource = CrystalReportSource1;
需要设置源代码,因为我有两种报告,并且根据其他会话参数,我会更改我应该在屏幕上打印哪个报告(以及我应该绑定哪个报告源)。
不幸的是,这段代码对我不起作用。 CRViewer向我显示一些提示/框说“登录数据库失败”(它只是我的翻译,因为这是我的语言环境)。我不知道如何使它工作。也不是我的DB(Access),报告也不需要凭证登记(换句话说 - 我不必将它们放在任何地方)。
任何帮助都将不胜感激。
答案 0 :(得分:0)
由于您正在动态更改报告源,因此您还需要动态指定登录。
如果您的服务器和数据库相同,那将会更容易。我自己没试过,但你可以尝试一下。
Private Sub aMethod(ByVal name as String, ByVal sessionName as String)Handles Me.Load
Try
Dim cryRpt As New ReportDocument
Dim crtableLogoninfos As New TableLogOnInfos
Dim crtableLogoninfo As New TableLogOnInfo
Dim crConnectionInfo As New ConnectionInfo
Dim CrTables As Tables
Dim CrTable As Table
Select Case sessionName
Case OneSessionName 'specify a session name here'
Dim rptDoc = OneSessionName
Case AnotherSessionName 'specify other session name here'
Dim rptDoc = AnotherSessionName
End Select
Dim rptDoc = CType(rptDoc, String)
cryRpt.Load(rptDoc)
Select Case sessionName
Case OneSessionName
With crConnectionInfo
.ServerName = "yourServer1Name"
.DatabaseName = "YourDB1Name"
.UserID = "yourUser1Id"
.Password = "yourPassword1"
End With
Case AnotherSessionName
With crConnectionInfo
.ServerName = "yourServer2Name"
.DatabaseName = "YourDB2Name"
.UserID = "yourUser2Id"
.Password = "yourPassword2"
End With
End Select
CrTables = cryRpt.Database.Tables
For Each CrTable In CrTables
crtableLogoninfo = CrTable.LogOnInfo
crtableLogoninfo.ConnectionInfo = crConnectionInfo
CrTable.ApplyLogOnInfo(crtableLogoninfo)
Next
crsAllReports.PrintMode = PaperOrientation.Landscape
crsAllReports.ReportSource = cryRpt
Catch ex As Exception
lblError.Text = "No report"
lblError.Visible = True
End Try
End Sub
注意'如果您的服务器和数据库名是相同的,则可能不需要第二个switch语句。而只是使用:
With crConnectionInfo
.ServerName = "yourServerName"
.DatabaseName = "YourDBName"
.UserID = "yourUserId"
.Password = "yourPassword"
End With