水晶报告表现 [英] Crystal Report Performance

查看:66
本文介绍了水晶报告表现的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是.NET的新手,并且一直在玩Crystal for VS2005。我找到了一堆Crystal和VS2005的示例代码。


一个示例允许您选择要传递给报告的参数。看一下代码,我注意到在页面init事件中设置了参数。如果是这种情况,似乎报告会在每次返回服务器时再次运行。这是真的吗?


我注意到当您翻阅报告的不同页面时会发生回发。如果每次返回服务器时重新运行报告,对我来说似乎是件坏事?我在整个过程中缺少什么?晶体引擎是否足够聪明,知道该报告不需要根据db和参数进行重新运行?


以下是代码


Partial Class _Default
Inherits System.Web.UI.Page
Private Const PARAMETER_FIELD_NAME As String =" ; City"


受保护的子Page_Init(ByVal sender As Object,ByVal e As System.EventArgs)处理Me.Init
ConfigureCrystalReports()
End Sub

Private Sub ConfigureCrystalReports()
Dim myArrayList As ArrayList = New ArrayList()
Dim reportPath As String = Server.MapPath(&CustomersByCity.rpt")
myCrystalReportViewer.ReportSource = reportPath
Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo
If Not IsPostBack Then defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(myParameterFields)
defaultParameterValuesList.DataBind()
myArrayList。添加(" Paris")
myArrayList.Add(" Tokyo")
Session(" myArrayList")= myArrayList
Else
myArrayList = CType(Session(" myArrayList")), ArrayList)
如果




























currentParameterValues As ParameterValues = New ParameterValues()
for EachValue As Object in myArrayList
Dim myParameterDiscreteValue As ParameterDiscreteValue = New ParameterDiscreteValue()
myParameterDiscreteValue.Value = submittedValue.ToString()
currentParameterValues.Add(myParameterDiscreteValue )


Nex t
Dim myParameterField As ParameterField = myParameterFields(PARAMETER_FIELD_NAME)
myParameterField.CurrentValues = currentParameterValues


End Sub



Private Function GetDefaultValuesFromParameterField(ByVal myParameterFields As ParameterFields)As ArrayList
Dim myParameterField As ParameterField = myParameterFields(PARAMETER_FIELD_NAME)
Dim defaultParameterValues As ParameterValues = myParameterField.DefaultValues
Dim myArrayList As ArrayList = New ArrayList()
For Each myParameterValue As ParameterValue在defaultParameterValues中
If(不是myParameterValue.IsRange)然后
Dim myParameterDiscreteValue As ParameterDiscreteValue = CType(myParameterValue,ParameterDiscreteValue)
myArrayList.Add(myParameterDiscreteValue.Value.ToString())
结束如果


返回myArrayList
















Dim myArrayList As ArrayList = New ArrayList()
For Each Item As ListItem in defaultParameterValuesList.Items
if item.Selected Then
myArrayList.Add(item.Value)
End If
Next
myCrystalReportViewer.ReportSource = Server.MapPath(&CustomersByCity.rpt")
Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo
SetCurrentValuesForParameterField(myParameterFields,myArrayList)
Session(" myArrayList") = myArrayList
ConfigureCrystalReports()
End Sub
End Class


TIA for you insight




解决方案

您应该做的是创建初始加载报告并将其放入会话,然后在每个回发中查看会话中的对象。例如:

受保护的子Page_Init(ByVal sender As Object,ByVal e As System.EventArgs)处理Me.Init
如果不是IsPostback那么
'使用报告文档创建报告并设置参数< '>将reportdocument对象放入会话
EndIf
crystalreportviewer1.reportsource = session(" myReportobject")
End Sub


I am a newbie to .NET and have been playing with Crystal for VS2005.  I found a bunch of sample codes for Crystal and VS2005. 

One example allows you to select parameter to pass to the report.  Looking at the code, I noticed that the paramters are set on the page init event.  If this is the case, it seems that the report gets run again every there time there a trip back to the server.  Is this true?

I noticed that a postback occurs when you page through the different pages of the report.  If the reports is rerun each time you go back to the server, seem like a bad thing to me? What am I missing in the whole process?  Is the crystal engine smart enough to know that this report doesn't need to ge rerun based on db and parameter? 

Here is the code

Partial Class _Default
    Inherits System.Web.UI.Page
    Private Const PARAMETER_FIELD_NAME As String = "City"

    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
        ConfigureCrystalReports()
    End Sub
   
    Private Sub ConfigureCrystalReports()
        Dim myArrayList As ArrayList = New ArrayList()
        Dim reportPath As String = Server.MapPath("CustomersByCity.rpt")
        myCrystalReportViewer.ReportSource = reportPath
        Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo
        If Not IsPostBack Then
            defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(myParameterFields)
            defaultParameterValuesList.DataBind()
            myArrayList.Add("Paris")
            myArrayList.Add("Tokyo")
            Session("myArrayList") = myArrayList
        Else
            myArrayList = CType(Session("myArrayList"), ArrayList)
        End If
        SetCurrentValuesForParameterField(myParameterFields, myArrayList)
    End Sub

    Private Sub SetCurrentValuesForParameterField(ByVal myParameterFields As ParameterFields, ByVal myArrayList As ArrayList)
        Dim currentParameterValues As ParameterValues = New ParameterValues()
        For Each submittedValue As Object In myArrayList
            Dim myParameterDiscreteValue As ParameterDiscreteValue = New ParameterDiscreteValue()
            myParameterDiscreteValue.Value = submittedValue.ToString()
            currentParameterValues.Add(myParameterDiscreteValue)

        Next
        Dim myParameterField As ParameterField = myParameterFields(PARAMETER_FIELD_NAME)
        myParameterField.CurrentValues = currentParameterValues

    End Sub


    Private Function GetDefaultValuesFromParameterField(ByVal myParameterFields As ParameterFields) As ArrayList
        Dim myParameterField As ParameterField = myParameterFields(PARAMETER_FIELD_NAME)
        Dim defaultParameterValues As ParameterValues = myParameterField.DefaultValues
        Dim myArrayList As ArrayList = New ArrayList()
        For Each myParameterValue As ParameterValue In defaultParameterValues
            If (Not myParameterValue.IsRange) Then
                Dim myParameterDiscreteValue As ParameterDiscreteValue = CType(myParameterValue, ParameterDiscreteValue)
                myArrayList.Add(myParameterDiscreteValue.Value.ToString())
            End If
        Next
        Return myArrayList
    End Function


    Protected Sub redisplay_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles redisplay.Click
        Dim myArrayList As ArrayList = New ArrayList()
        For Each item As ListItem In defaultParameterValuesList.Items
            If item.Selected Then
                myArrayList.Add(item.Value)
            End If
        Next
        myCrystalReportViewer.ReportSource = Server.MapPath("CustomersByCity.rpt")
        Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo
        SetCurrentValuesForParameterField(myParameterFields, myArrayList)
        Session("myArrayList") = myArrayList
        ConfigureCrystalReports()
    End Sub
End Class

TIA for you insight

 

 

 

解决方案

What you should be doing is creating the report on the initial load and putting it into session, then on every postback viewing the object in session.  For example:

Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
If not IsPostback Then
        'Create report using the report document and set parameters
        'put the reportdocument object in session
EndIf
crystalreportviewer1.reportsource = session("myReportobject")
    End Sub


这篇关于水晶报告表现的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆