2014年6月19日 星期四

Crystal Report 錯誤 - (0x8002000B): 無效的索引。

System.Runtime.InteropServices.COMException (0x8002000B): 無效的索引。 (發生例外狀況於 HRESULT: 0x8002000B (DISP_E_BADINDEX)) CrystalDecisions.ReportAppServer.DataDefModel.FieldsClass.get_Item(Int32 Index) CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinitions.get_Item(Int32 index) CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinitions.get_Item(String fieldName) CrystalDecisions.CrystalReports.Engine.ReportDocument.SetParameterValue(String name, Object val) 

以上很明顯看出是設定參數時發生錯誤。

報表的欄位可以分很多種,如下圖:

//這裡是設定資料庫欄位的綁定
rpDoc.SetDataSource(dtFinall);
//這裡是設定參數欄位的綁定
rpDoc.SetParameterValue("formno", dtFinall.Rows[0]["formno"].ToString());
rpDoc.SetParameterValue("orderno", dtFinall.Rows[0]["orderno"].ToString());
rpDoc.SetParameterValue("budget_code", dtFinall.Rows[0]["budget_code"].ToString());
rpDoc.SetParameterValue("batchno", dtFinall.Rows[0]["batchno"].ToString());
rpDoc.SetParameterValue("vat_num", dtFinall.Rows[0]["vat_num"].ToString());
rpDoc.SetParameterValue("supp_nm", dtFinall.Rows[0]["supp_nm"].ToString());
rpDoc.SetParameterValue("addr", dtFinall.Rows[0]["addr"].ToString());
rpDoc.SetParameterValue("work", dtPur_Basic.Rows[0]["purchaser_nmc"].ToString());

而錯誤主要是找不到參數欄位,明明有formno、orderno等欄位,但是在參數欄位中卻沒有設定,程式match不到就出錯了。

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.