2011-07-16 334 views
1

Webアプリケーションのasp.netでCrystalレポートを作成しました。一部の報告はうまくいきます。しかし時にはそうではありません。それは以下の問題を示しています。Crystalレポートインデックスが無効です。 (HRESULTからの例外:0x8002000B(DISP_E_BADINDEX))

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

バージョン情報:Microsoft .NET Frameworkのバージョン:2.0.50727.4927。 ASP.NETのバージョン:2.0.50727.4927

マイVS:VS 2008、データベース:MS SQL Expressの2005、OS:Windows 7の

は私の問題を解決するためのいずれかがあります。..

NB:マイコードは、クラス

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

答えて

2
    であります
  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 
17

を追加します。コードがレポートの定義済みパラメータと異なる

関連する問題