我几乎是水晶报告的新手。 我们有另一个团队正在制作报告,我正在将其与应用程序集成。 问题在于分页和用户定义的参数。 本质上,就是 document.table。 setdatasource 指向我们的查询结果集(在代码中设置)。 报表在打开时将提示用户输入参数,这将进一步减少向用户显示的结果,因为提示参数是记录选择公式的一部分。
AND
{@Age} >= 20 and
{@Age} < 30 and
{Report;1.Sector} = {?NewSector})
这将返回一个长度超过一页的表格。 但是,请求下一页将导致再次提示用户输入该扇区,并且一旦提供,将再次将用户带回到结果的第 1 页。
如果我取出对参数的引用,那么显然分页工作正常。
有没有办法只从用户那里获取一次参数,然后在后续的分页请求中重用该值?
感谢您的帮助...
我真傻。 我每次回发都会刷新报告。
编辑
再详细一点:
我在 RefreshReports 过程中创建了报告,该过程设置报告如下:
Dim objConnectionInfo As CrystalDecisions.Shared.ConnectionInfo
Dim crConnectionInfo As CrystalDecisions.Shared.ConnectionInfo
Dim myconnection As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings(ApplicationConstants.MyDB).ConnectionString)
Dim myConnBuilder As New SqlConnectionStringBuilder(myconnection.ConnectionString)
'// Log on credentials from web.config
objConnectionInfo = New CrystalDecisions.Shared.ConnectionInfo
objConnectionInfo.IntegratedSecurity = False
objConnectionInfo.ServerName = myconnection.DataSource
objConnectionInfo.UserID = myConnBuilder.UserID
objConnectionInfo.Password = myConnBuilder.Password
crConnectionInfo = objConnectionInfo
'// Get the report details needed
rep = Request.QueryString("Report")
crDoc.Load(Server.MapPath(rep))
crDoc.SetDatabaseLogon(myConnBuilder.UserID, myConnBuilder.Password)
Dim crDatabase As CrystalDecisions.CrystalReports.Engine.Database
Dim crTables As CrystalDecisions.CrystalReports.Engine.Tables
Dim aTable As CrystalDecisions.CrystalReports.Engine.Table
crDatabase = crDoc.Database
crTables = crDatabase.Tables
然后有一系列如下的 else if:
ElseIf rep = "ExampleRep.rpt" Then
For Each aTable In crTables
If aTable.Name = "GetSectorRep;1" Then
Dim NewSector As String = ""
NewSector = Session("NewSector").ToString()
aTable.SetDataSource(DAL.GetSectorRepTable(NewSector))
End If
Next
在我的 Page_Init 中,我获取所需的查询字符串并调用 RefreshReports。 我遇到的问题是,我还在 page_load 上的 If Postback 中请求 RefreshReports,这意味着每次回发报告(例如新页面)时,它都会再次请求参数,因为报告正在重新创建。
所以,愚蠢的我 - 最终是一个非常明显的错误!