Список записей 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 ничего не делает с возвращенным файлом. Я не представляю, как это вообще сработает, даже если вы выберете только одну запись.