locked
Cannot pass parameter to crystal report RRS feed

  • Question

  • User-2128752353 posted

     I am using the following code to pass parameter from VB to crystal report but getting the error messgae "Invalid index. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))" while it trying to add the first parameter.  This chunk of coding works in another VB perfectly.  The only diffferent is the working one takes the parameter to stored procedure where the failed one I added parameter during crystal report design time.  Anyone has a clue?

     Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim VirtualPath As String = Request.ApplicationPath.Substring(1, Request.ApplicationPath.Length - 1)
    
            Dim StmtFOlder As String = Server.MapPath("~/") & VirtualPath & "stmt"
            If Not System.IO.Directory.Exists(StmtFOlder) Then
                System.IO.Directory.CreateDirectory(StmtFOlder)
            End If
    
            Dim Crystal As New CrystalReport
            Crystal.RptPath = Server.MapPath("~/CRDftn/") + "CrystalReport.rpt"
            Crystal.PathPDF = StmtFOlder & "/test.pdf"
            Crystal.CreatePDF = True
            Crystal.PrintReport = False
            Crystal.CrystalReportParamName.Add("@OCId")
            Crystal.CrystalReportParamValue.Add(7)
            Crystal.CrystalReportParamName.Add("@FrCUstNo")
            Crystal.CrystalReportParamValue.Add("000000")
            Crystal.CrystalReportParamName.Add("@ToCUstNo")
            Crystal.CrystalReportParamValue.Add("999999")
            Crystal.GenerateReport()
    
        End Sub


     

    Monday, June 21, 2010 12:19 AM

All replies

  • User-1900356179 posted

    Hi,

    It seems you're supplying one or more parameters extra to the reports which a report is not expecting. If this is not the case then try the work around mentioned below..

    Workaround

    It seems that line is expecting a parameter index and not the specific name of the parameter.

    try
    rptReport.SetParameterValue(0, obj);
    rptReport.SetParameterValue(1, obj);
    rptReport.SetParameterValue(2, obj);


    Set report object = to the actual report and not loading the report. If you load the report rather then set it equal to the actual report, it might not know the parameter names.

    <!-- / message -->
    Monday, June 21, 2010 12:53 AM
  • User-2128752353 posted

    Thanks,  Rahul.

    Would you mind to show me how my code should be corrected?

    Monday, June 21, 2010 1:03 AM
  • User-1802908944 posted

    you can try this

    irptDocument.Load(Server.MapPath("~/Reports/rptStudentTranScript.rpt"));
                    irptDocument.SetDataSource(dsTranScript.Tables[0]);
                    irptDocument.SetParameterValue("SessionDate", Session["SessionDate"]);
                    irptDocument.SetParameterValue("ExaminationName", Session["ExaminationName"]);
                    irptDocument.SetParameterValue("UserName", Session["UserName"]);
                    crvViwer.DisplayGroupTree = false;
                    crvViwer.ReportSource = irptDocument;
                    crvViwer.DataBind();


    this is working code.


    happy coding

    Monday, June 21, 2010 1:10 AM
  • User-2128752353 posted

    Sorry, where does the dsTranScript come from? 

    Monday, June 21, 2010 1:18 AM
  • User-2128752353 posted

    Actually my posted code works too if the data source is a stored procedure with input parameter.  But this time instead I change to two tables. 

    Monday, June 21, 2010 1:20 AM