TheBigBearNow Ответов: 0

Список записей C# MVC показывает несколько rdlcs 1 для каждой записи.


Всем привет,
У меня есть список записей, Когда я пошел, чтобы поместить свой список в качестве источника данных отчета в мой отчет rdlc, он сказал, что мой источник данных должен быть таблицей данных или 2 другими вариантами, которые он дал. Я превратил свой список в datatable, и теперь, когда я вставляю его в качестве источника данных, я не получаю никаких ошибок, и мое действие контроллера завершается, но мой "возвращаемый файл" никогда не открывает новый отчет или что-то еще для моей записи. Если я попытаюсь просто вставить 1 запись, то получу отчет, открытый как отчет rdlc.
            <input type="button" class="btn btn-primary" name="command" id="btnGetChecks" value="Generate Selected" />
$('#btnGetChecks').on('click', function () {
            var arrChkBoxes = [];
            var arrSelectedQIDs = [];
            var quoteid = $(this).attr("value");
            var chkboxtable = $('#maintbl');
            var chktablebody = chkboxtable.find('#maintblbody');
            $("input:checked").each(function (index, value) {
                arrChkBoxes.push($(value).val());
            });
            // Push all QuoteIDs into new array
            $.each(arrChkBoxes, function (key, value) {
                if (IsPositiveInteger(value)) {
                    arrSelectedQIDs.push(value);
                }
            });

            $.ajax({
                type: "GET",
                url: "/Service/GeneratePreviewReports/",
                contentType: "application/json; charset=utf-8",
                traditional: true,
                data: { "quoteIDs": arrSelectedQIDs },
                success: function () {
                    alert("success");
                },
                error: function (request, status, error) {
                    alert("error " + request.responseText);
                }
            });
            //alert(arrSelectedQIDs);

        });
        public ActionResult GeneratePreviewReports(int[] quoteIDs)
        {
            List<ServiceQuote> lstQuotes = new List<ServiceQuote>();
            // servicequote same fields as 'Service_Fields'
            //for(int i=0; i<quoteIDs.Length-1; i++)
            //{ var quote = context.ServiceQuotes.Where(x => x.QuoteID == quoteIDs[i]).fi }
            if(quoteIDs != null)
            {
                foreach(var qid in quoteIDs)
                {
                    var quote = context.ServiceQuotes.Where(x => x.QuoteID == qid).FirstOrDefault();
                    lstQuotes.Add(quote);
                }
            }

            //TRACKER_TESTDataSetTableAdapters.Service_FieldsTableAdapter tableAdapter = new TRACKER_TESTDataSetTableAdapters.Service_FieldsTableAdapter();
            LocalReport localReport = new LocalReport()
            {
                ReportPath = Server.MapPath("~/ReportForms/VirtualService3.rdlc")
            };
            List<TRACKER_TESTDataSet.Service_FieldsRow> rows = new List<TRACKER_TESTDataSet.Service_FieldsRow>();

            foreach(var item in lstQuotes)
            {
                var itemTable = CreateDT(item);//CreateDataTable(item);
                // rows.Add(tableAdapter.Fill(item))
                ReportDataSource reportDataSource = new ReportDataSource("Service_Fields", itemTable);
                localReport.DataSources.Add(reportDataSource);
                // command specifies whether its a PDF EXCEL WORD IMAGE doc
                string command = "PDF";
                string reportType = command;
                string mimeType, encoding, fileNameExtension;
                string deviceInfo =
                    "<DeviceInfo>" +
                    "   <OutputFormat>" + command + "</OutputFormat>" +
                    "   <PageWidth>8.5in</PageWidth>" +
                    "   <PageHeight>11in</PageHeight>" +
                    "   <MarginTop>0.5in</MarginTop>" +
                    "   <MarginLeft>0.3in</MarginLeft>" +
                    "   <MarginRight>0.3in</MarginRight>" +
                    "   <MarginBottom>0.5</MarginBottom>" +
                    "</DeviceInfo>";

                Warning[] warnings;
                string[] streams;
                byte[] renderedBytes;
                renderedBytes = localReport.Render(reportType, deviceInfo, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);
                return File(renderedBytes, mimeType);
            }

            return RedirectToAction("VirtualService");
        }

        private DataTable CreateDT(object obj)
        {
            if(obj != null)
            {
                Type t = obj.GetType();
                DataTable dt = new DataTable(t.Name);
                foreach(PropertyInfo pi in t.GetProperties())
                {
                    dt.Columns.Add(new DataColumn(pi.Name));
                }
                DataRow dr = dt.NewRow();
                foreach(DataColumn dc in dt.Columns)
                {
                    dr[dc.ColumnName] = obj.GetType().GetProperty(dc.ColumnName).GetValue(obj, null);
                }
                dt.Rows.Add(dr);
                return dt;
            }
            return null;
        }


Что я уже пробовал:

Когда у меня есть 1 запись, мой отчет отображается, но теперь я хотел бы получить несколько отчетов по 1 для каждого элемента в списке или просто 1 отчет с каждым элементом 1 после другого в том же файле rdlc. Мой код выполняется, и мой ajax переходит к "успеху", но rdlc не открывается.

Richard Deeming

Ваше действие заключается только в экспорте отчета для первого идентификатора в списке. И ваш метод AJAX ничего не делает с возвращенным файлом. Я не представляю, как это вообще сработает, даже если вы выберете только одну запись.

0 Ответов