Visual Basic.NET - Pasar parametros a subreports

   
Vista:

Pasar parametros a subreports

Publicado por vlg (48 intervenciones) el 03/09/2007 17:06:43
Hola, tengo el siguiente problema, tengo un report contenedor de subreports, el report principal no esta conectado a ninguna BD pero los subreports si, el report principal tiene 2 parametros igual que todos los subreports (pc y usuario), el problema que tengo es que no se como pasar los parametros a los subreports, el codigo que estoy utlizando es el siguiente:

Friend Function ViewReport(ByVal sReportName As String, _
Optional ByVal sSelectionFormula As String = "", _
Optional ByVal param As String = "") As Boolean
'Declaring variablesables
Dim intCounter As Integer
Dim intCounter1 As Integer

Dim FRMrptViewer As New frmImp

'Crystal Report's report document object
Dim objReport As New _
CrystalDecisions.CrystalReports.Engine.ReportDocument

'object of table Log on info of Crystal report
Dim ConInfo As New CrystalDecisions.Shared.TableLogOnInfo

'Parameter value object of crystal report
' parameters used for adding the value to parameter.
Dim paraValue As New CrystalDecisions.Shared.ParameterDiscreteValue

'Current parameter value object(collection) of crystal report parameters.
Dim currValue As CrystalDecisions.Shared.ParameterValues

'Sub report object of crystal report.
Dim mySubReportObject As _
CrystalDecisions.CrystalReports.Engine.SubreportObject


'Sub report document of crystal report.
Dim mySubRepDoc As New CrystalDecisions.CrystalReports.Engine.ReportDocument

Dim strParValPair() As String
Dim strVal() As String
Dim index As Integer

Try

'Load the report
objReport.Load(sReportName)

'Check if there are parameters or not in report.
intCounter = objReport.DataDefinition.ParameterFields.Count

'As parameter fields collection also picks the selection
' formula which is not the parameter
' so if total parameter count is 1 then we check whether
' its a parameter or selection formula.

If intCounter = 1 Then
If InStr(objReport.DataDefinition.ParameterFields(0).ParameterFieldName, ".", CompareMethod.Text) > 0 Then
intCounter = 0
End If
End If

'If there are parameters in report and
'user has passed them then split the
'parameter string and Apply the values
'to their concurrent parameters.

If intCounter > 0 And Trim(param) <> "" Then
strParValPair = param.Split("&")

For index = 0 To UBound(strParValPair)
If InStr(strParValPair(index), "=") > 0 Then
strVal = strParValPair(index).Split("=")
paraValue.Value = strVal(1)
currValue = _
objReport.DataDefinition.ParameterFields(strVal(0)).CurrentValues
currValue.Add(paraValue)
objReport.DataDefinition.ParameterFields(strVal(0)).ApplyCurrentValues(currValue)

End If
Next
End If

'Set the connection information to ConInfo object so that we can apply the
' connection information on each table in the report
ConInfo.ConnectionInfo.UserID = "ctc"
ConInfo.ConnectionInfo.Password = "ctc"
ConInfo.ConnectionInfo.ServerName = "sds12"
ConInfo.ConnectionInfo.DatabaseName = "Planificador"

For intCounter = 0 To objReport.Database.Tables.Count - 1
objReport.Database.Tables(intCounter).ApplyLogOnInfo(ConInfo)
Next

' Loop through each section on the report then look
' through each object in the section
' if the object is a subreport, then apply logon info
' on each table of that sub report

For index = 0 To objReport.ReportDefinition.Sections.Count - 1
For intCounter = 0 To _
objReport.ReportDefinition.Sections(index).ReportObjects.Count - 1
With objReport.ReportDefinition.Sections(index)
If .ReportObjects(intCounter).Kind = _
CrystalDecisions.Shared.ReportObjectKind.SubreportObject Then
mySubReportObject = CType(.ReportObjects(intCounter), _
CrystalDecisions.CrystalReports.Engine.SubreportObject)

mySubRepDoc = _
mySubReportObject.OpenSubreport(mySubReportObject.SubreportName)


For intCounter1 = 0 To mySubRepDoc.Database.Tables.Count - 1
mySubRepDoc.Database.Tables(intCounter1).ApplyLogOnInfo(ConInfo)
mySubRepDoc.Database.Tables(intCounter1).ApplyLogOnInfo(ConInfo)
Next
End If
End With
Next
Next
'If there is a selection formula passed to this function then use that
If sSelectionFormula.Length > 0 Then
objReport.RecordSelectionFormula = sSelectionFormula
End If
'Re setting control
crViewer.ReportSource = Nothing

'Set the current report object to report.
crViewer.ReportSource = objReport

'Show the report
crViewer.Show()
Return True
Catch ex As System.Exception
MsgBox(ex.Message)
End Try
End Function

En el next que recorre los subreports he intentado poner los siguientes :
mySubRepDoc .SetParameterValue(0,"sds12")
mySubRepDoc .SetParameterValue(1,"xxxxxx")
pero cuando ejecuta el report me pide que introduzca los parametros, osea que sigue sin funcionar

¿Alguien me puede guiar, gracias?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Pasar parametros a subreports

Publicado por P. J. (706 intervenciones) el 03/09/2007 17:16:35
WAO!

Tiene demasiado codigo!, yo tengo varios reportes algunos con 1, 2 y 3 subreports y en la mayoria los parametro de los Subreports DEPENDEN del principal para esto:

Cuando importar tu subreport, click derecho, ASIGNAR LINKS o CAMBIAR LINK
lo que debes hacer alli es vincular los parametros de tu subreport a los del principal. y asi asignas parametros al principal:

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared

Dim oReporte As New rptComprobanteRenta
Dim crParameterDiscreteValue As ParameterDiscreteValue
Dim crParameterFieldDefinitions As ParameterFieldDefinitions
Dim crParameterFieldLocation As ParameterFieldDefinition
Dim crParameterValues As ParameterValues

crParameterFieldDefinitions = oReporte.DataDefinition.ParameterFields
crParameterFieldLocation = crParameterFieldDefinitions.Item("@CMBT_NUMERO")
crParameterValues = crParameterFieldLocation.CurrentValues
crParameterDiscreteValue = New CrystalDecisions.Shared.ParameterDiscreteValue
crParameterDiscreteValue.Value = Me.lblNumero.Text.Trim
crParameterValues.Add(crParameterDiscreteValue)
crParameterFieldLocation.ApplyCurrentValues(crParameterValues)

oReporte.SetDatabaseLogon("sa","sa")
oReporte.PrintOptions.PaperSize = PaperSize.PaperA4
Me.crvReporte.ReportSource = oReporte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Pasar parametros a subreports

Publicado por vlg (48 intervenciones) el 04/09/2007 09:08:36
Gracias P.J., me ha servido
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar