Crystal Report Неверный индекс.(Исключение из HRESULT: 0x8002000B (DISP_E_BADINDEX)) - PullRequest
1 голос
/ 16 июля 2011

Я сделал кристальный отчет в asp.net для веб-приложения.Некоторые доклады открываются красиво.Но иногда это не так.Это показывает следующую проблему.

Неверный индекс.(Исключение из HRESULT: 0x8002000B (DISP_E_BADINDEX))
Описание: во время выполнения текущего веб-запроса произошло необработанное исключение.Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: System.Runtime.InteropServices.COMException: Неверный индекс.(Исключение из HRESULT: 0x8002000B (DISP_E_BADINDEX))
Ошибка источника: необработанное исключение было сгенерировано во время выполнения текущего веб-запроса.Информацию о происхождении и местоположении исключения можно определить с помощью приведенной ниже трассировки стека исключений.
Трассировка стека: [COMException (0x8002000b): недопустимый индекс.(Исключение из HRESULT: 0x8002000B (DISP_E_BADINDEX))]
Report_Viewer.Page_Load (Отправитель объекта, EventArgs e) + 894
System.Web.Util.CalliHelper.EventArgFunctionCaller (IntPtr fp, Event Object e, t, Object o, t) + 14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback (отправитель объекта, EventArgs e) + 35
System.Web.UI.Control.OnLoad (EventArgs e) + 99
System.Web.UI.Control.LoadRecursive () + 50
System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, логическое includeStagesAfterAsyncPoint) +627

Информация о версии: Microsoft .NET Framework Версия: 2.0.50727.49;ASP.NET версия: 2.0.50727.4927

My VS: VS 2008, база данных: MS SQL Express 2005, ОС: Windows 7

Есть ли кто-нибудь, чтобы решить мою проблему ..

Примечание: мой код в классе

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;
}

Загрузка страницы просмотра отчетов

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;
    }       
}

Ответы [ 4 ]

20 голосов
/ 24 сентября 2012

Это потому, что параметры (или имена параметров), которые вы задали в своем коде, отличаются от определенных параметров в вашем отчете

2 голосов
/ 04 апреля 2012
  1. Добавить один метод
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. Добавить функцию для загрузки и установки параметра *

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
1 голос
/ 30 августа 2018

Эта ошибка также возникает, когда вы изменяете настройку размера страницы по сравнению с предыдущей и забыли изменить код для принудительной печати с использованием настроек предыдущей страницы.

например.A5> A4, но с кодом вы по-прежнему устанавливаете размер страницы в A5.

0 голосов
/ 15 июля 2019

Эта ошибка возникает, когда ваши параметры не совпадают как в отчетах, так и в коде. Может быть, ваше имя параметра неверно. Поэтому убедитесь, что параметры и имена параметров совпадают в отчете и вашей кодировке.

...