RDLC report Index was outside the bounds of the array asp net core

2.7k Views Asked by At

I got Index was outside the bounds of the array error when use debug mode in asp net core mvc, but its ok when run in non-debug mode (Shift+F5).

Here details of error description :

An unhandled exception occurred while processing the request. IndexOutOfRangeException: Index was outside the bounds of the array. AspNetCore.ReportingServices.RdlExpressions.ExpressionHostObjectModel.RemoteArrayWrapper.get_Item(int index)

ReportProcessingException: An unexpected error occurred in Report Processing. Index was outside the bounds of the array. AspNetCore.ReportingServices.ReportProcessing.Execution.RenderReport.Execute(IRenderingExtension newRenderer)

LocalProcessingException: An error occurred during local report processing.;An unexpected error occurred in Report Processing. Index was outside the bounds of the array. AspNetCore.Reporting.InternalLocalReport.InternalRender(string format, bool allowInternalRenderers, string deviceInfo, PageCountMode pageCountMode, CreateAndRegisterStream createStreamCallback, out Warning[] warnings)

Here my export to pdf code :

int extension = 1;
            var path = $"{this._webHostEnvironment.WebRootPath}\\Report\\RptDO2.rdlc";
            Dictionary<string, string> parameters = new Dictionary<string, string>();
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            Encoding.GetEncoding("windows-1252");
            parameters.Add("txtto", inv.Quotation.CustomerContact.Customer.CompanyName);
            parameters.Add("txtaddress_detail", inv.Quotation.CustomerContact.Customer.Address1 + "\r\n"
                + inv.Quotation.CustomerContact.Customer.Address2 + "- "
                + inv.Quotation.CustomerContact.Customer.City + "- "
                + inv.Quotation.CustomerContact.Customer.State + " ("
                + inv.Quotation.CustomerContact.Customer.Zip + ")\r\n"
                + "Phone : " + inv.Quotation.CustomerContact.Customer.PhoneNumber
                + ", Email : " + inv.Quotation.CustomerContact.Customer.Email);
            parameters.Add("txtdo_no", inv.Id.Replace("INV", "DO"));
            parameters.Add("txtdate", inv.Quotation.CreatedAt.ToShortDateString());
            parameters.Add("txtrefnum", inv.QuotationId);
            parameters.Add("txtfrom", us.FirstName + " " + us.LastName);
            parameters.Add("txtUP", TextUp);
            parameters.Add("kop_nama", c.CpName);
            parameters.Add("kop_alamat", c.CpStreetAddress);
            parameters.Add("kop_alamat2", c.CpCity + " " + c.CpState + " (" + c.CpZip + ")");
            parameters.Add("kop_contact", c.CpPhone);
            parameters.Add("kop_email", c.CpEmail);
            parameters.Add("kop_logo", Convert.ToBase64String(c.CpFoto));
            parameters.Add("txtjabatan", us.Designation);
            parameters.Add("txtPrintedBy", lgnuser.FirstName + " " + lgnuser.LastName);

            List<vwQuotationDetail> vwQuotationDetails = new List<vwQuotationDetail>();
            foreach (TblquotationDetail quos in inv.Quotation.TblquotationDetail.OrderBy(o => o.Id))
            {
                vwQuotationDetail quotationDetail = new vwQuotationDetail
                {
                    id = quos.Id,
                    quotation_id = quos.QuotationId,
                    order_number = quos.OrderNumber,
                    product_name = quos.Product.ProductName,
                    product_id = quos.ProductId,
                    product_comments = string.IsNullOrEmpty(quos.ProductComments) ? "" : quos.ProductComments,
                    quantity = quos.Quantity,
                    unit_price = quos.UnitPrice,
                    unit_name = quos.Product.Unit.UnitName,
                    sub_total = quos.SubTotal,
                    product_desc = quos.Product.ProductDesc,
                    category_name = quos.Product.Category.CategoryName
                };
                vwQuotationDetails.Add(quotationDetail);
            }
                       
            LocalReport localReport = new LocalReport(path);
            localReport.AddDataSource("dsDO", vwQuotationDetails.ToArray());
            //var result = localReport.Execute(RenderType.Pdf, extension, parameters, mimtype);
            var result = localReport.Execute(RenderType.Pdf, extension, parameters);
            return File(result.MainStream, "application/pdf");

Any suggestion will appreciated, thanks in advance.

2

There are 2 best solutions below

0
On

i had the same issue while dealing with multiple rdlc files, the issue is due to caching problem of reporting package. after trying of different solution i found that the issue is with the packeage and the solution is migrate to new package.

Solution : uninstall existing report package and install new ReportViewerCore.NETCore nuget package .

the syntax and usages are similar for both package and we can easily generate report using this package ,to know more about package refer : https://github.com/lkosson/reportviewercore

0
On

Just Dont Pass extension as 1 in:

  var result = localReport.Execute(RenderType.Pdf, extension, parameters);

The Solution is:

  int ext = (int)(DateTime.Now.Ticks >> 10);
  var result = localReport.Execute(RenderType.Pdf, ext, param);

In other words, Extension should not be same for every report.