I have made a crystal report in asp.net for web application. Some report open nicely. But sometimes it does not. It shows the following problem.
Invalid index. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Runtime.InteropServices.COMException: Invalid index. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))
Source Error: An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace: [COMException (0x8002000b): Invalid index. (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))]
Report_Viewer.Page_Load(Object sender, EventArgs e) +894
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627
Version Information: Microsoft .NET Framework Version:2.0.50727.4927; ASP.NET Version:2.0.50727.4927
My VS: VS 2008, Database:MS SQL Express 2005, OS:Windows 7
Is there any one to solve my problem..
NB: My code is in a Class
public ReportDocument ShowReport(string ReportName, string Parameter1)
{
try
{
cryRpt.Load(ReportName);
cryRpt.SetDatabaseLogon(UserName, Password, ServerName, DatabaseName);
crParameterValues.Clear();
crParameterDiscreteValue.Value = Parameter1;// as like Parameter1
crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields;
crParameterFieldDefinition = crParameterFieldDefinitions["@Parameter1"];
crParameterValues = crParameterFieldDefinition.CurrentValues;
crParameterValues.Add(crParameterDiscreteValue);
crParameterFieldDefinition.ApplyCurrentValues(crParameterValues);
}
catch (Exception ex)
{
throw ex;
//ShowReport(@"default_report.rpt");
}
//CleareParameter();
return cryRpt;
}
Report Viewer Page load
protected void Page_Load(object sender, EventArgs e)
{
string ReportName="";
string Parameter1="";
ReportName= Session["ReportName "].ToString();
Parameter1 = Session["Parameter1"].ToString();
}
try
{
if (Session["Parameter2"].ToString() != null)
{
Parameter2 = Session["Parameter2"].ToString();
icount = icount + 1;
}
}
catch (Exception ) { }
ReportViewer oReportViewer = new ReportViewer(); // Class file
ReportDocument rptDoc = new ReportDocument();
try
{
rptDoc = oReportViewer.ShowReport(ReportName, Parameter1);
rptDoc = oReportViewer.ShowReport(ReportName, Parameter1,
rptDoc.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, false, "Report");
CrystalReportViewer1.ReportSource = rptDoc;
}
catch (Exception ex)
{
throw ex;
}
}
That is because the parameters (or parameters names) you set in your code are different from defined parameters in your report
Public Sub LoadReport()
Try
If Validation() = True Then Exit Sub
If ClsDcon.ShowItems(Me.Text) = False Then Exit Sub
Dim lvarr(4, 1) As String
lvarr(0, 0) = "@CompId"
lvarr(0, 1) = Connection.strGCompanyId 'strCompId
lvarr(1, 0) = "@DepartmentId"
lvarr(1, 1) = txtstaffAbscentees.GetTextBox.Tag 'strSDMUId
lvarr(2, 0) = "@FromDate"
lvarr(2, 1) = ClsDcon.ConvertDateToInt(dtpFromDate.GetTextBox.Text) 'strFromDate
lvarr(3, 0) = "@PFromDate"
lvarr(3, 1) = "Staff Abscentees Report On: " & dtpFromDate.GetTextBox.Text 'ClsDcon.ConvertIntToDate(strFromDate)
lvarr(4, 0) = "@Flags"
lvarr(4, 1) = intFlag
Me.Text = frmMain
ClsDcon.LoadCrystalReport(New CrtStaffAbscentees, crpStaffAbscenteesReportviewer, lvarr)
Catch ex As Exception
End Try
End Sub
*2. Add Function To Load and Set Parameter*
Public Sub LoadCrystalReport(ByVal pvcrpReport As Object, ByVal pvcrvControl As CrystalReportViewer, Optional ByVal pvarrParamValues As Array = Nothing, Optional ByVal pvstrSelection As String = Nothing, Optional ByVal invVal As Integer = 0)
Try
Dim lvobjReport As Object = pvcrpReport
'myRpt.Load("D:\Projects\MyAccountswin2008new\UILayer\Sales\Sales Reports\CrtPOSBillReport.rpt")
For i As Integer = 0 To pvarrParamValues.GetUpperBound(0)
lvobjReport.SetParameterValue(pvarrParamValues(i, 0).ToString, pvarrParamValues(i, 1))
Next
Dim lsMethod As String = System.Reflection.MethodBase.GetCurrentMethod().Name
Dim loConnInfo As New CrystalDecisions.Shared.ConnectionInfo
'Dim lsMode As String = Configuration.ConfigurationSettings.AppSettings("Mode")
loConnInfo.ServerName = My.Settings.RPTServerName
loConnInfo.DatabaseName = My.Settings.RPTDatabaseName
loConnInfo.UserID = My.Settings.RPTUserID
loConnInfo.Password = My.Settings.RPTPassword
Dim loTables As CrystalDecisions.CrystalReports.Engine.Tables
Dim loTable As CrystalDecisions.CrystalReports.Engine.Table
Dim loTableLogonInfo As CrystalDecisions.Shared.TableLogOnInfo
loTables = lvobjReport.Database.Tables
For Each loTable In loTables
loTableLogonInfo = loTable.LogOnInfo
loTableLogonInfo.ConnectionInfo = loConnInfo
loTable.ApplyLogOnInfo(loTableLogonInfo)
loTable.Location = loTable.Name
Next
'pvcrvControl.RefreshReport()
pvcrvControl.ReportSource = lvobjReport
pvcrvControl.Refresh()
'pvcrvControl.RefreshReport()
If invVal = 1 Then
Dim prd As New System.Drawing.Printing.PrintDocument
lvobjReport.PrintOptions.PrinterName = prd.PrinterSettings.PrinterName
If lvobjReport.PrintOptions.PrinterName = "" Or lvobjReport.PrintOptions.PrinterName = Nothing Then
MyMessagebox.MyMessagebox.ShowMessage("Set Default Printer", "Global Funtions_UI", MessageBoxIcon.Information)
End If
'prd.DefaultPageSettings.PaperSize.RawKind = PaperKind.Custom
'prd.DefaultPageSettings.PaperSize.PaperName = "NewSize"
'Dim prnPS As New Printing.PaperSize("HalfFolio", 850, 650)
'Dim intIdx As Integer
'For intIdx = 0 To prd.PrinterSettings.PaperSizes.Count - 1 Step 1
' If prd.PrinterSettings.PaperSizes(intIdx).Kind = Printing.PaperKind.Custom Then
' prnPS.RawKind = prd.PrinterSettings.PaperSizes(intIdx).RawKind
' prd.DefaultPageSettings.PaperSize = prnPS
' End If
'Next
'prd.Print()
'If prd.DefaultPageSettings.PaperSize.Kind = PaperKind.Custom Then
' prd.DefaultPageSettings.PaperSize.Width = 827
' prd.DefaultPageSettings.PaperSize.Height = 650
NumberofPrints()
lvobjReport.PrintToPrinter(dblPrintValue, False, 0, 0)
'End If
ElseIf invVal = 2 Then
Dim prd As New System.Drawing.Printing.PrintDocument
lvobjReport.PrintOptions.PrinterName = prd.PrinterSettings.PrinterName
If lvobjReport.PrintOptions.PrinterName = "" Or lvobjReport.PrintOptions.PrinterName = Nothing Then
MyMessagebox.MyMessagebox.ShowMessage("Set Default Printer", "Global Funtions_UI", MessageBoxIcon.Information)
End If
NumberOfReturnPrints()
lvobjReport.PrintToPrinter(dblReturnPrintValue, False, 0, 0)
End If
Catch ex As Exception
MYERROR.WriteLogFile("GlobalFunctions_UI", "LoadCrystalReport", ex)
End Try
End Sub
This error also occurs when you change page size setting from previous one and forgot to change code to force print using the previous page's settings.
eg. A5 > A4, but with code you are still setting page size to A5.
crParameterFieldDefinitions["@Parameter1"];
Above line you will check that parameter exist or not. I think that one is not available.
Hope this one is helpful!!!
This error occurs when your parameters not matched in both reports & coding. May be your parameter name is wrong. So verify the parameters & parameter names are same in report & your coding.
User contributions licensed under CC BY-SA 3.0