Generate (Download) separate PDF report for each record using RDLC in ASP.Net MVC

Last Reply one year ago By dharmendr

Posted one year ago

Hello everyone,

I have a list of records, When I went to put my list in as a report data source to my rdlc report it said my datasource must be a data table or 2 other options it gave. I turned my list into a datatable and now when I insert that as my data source I get no errors and my controller action completes but my return file never opens up a new report or anything for my record.

If I try to just insert 1 record I get the report opened as an rdlc report.

is there a way with you selecting those checkboxes that it could open 2 windows 1 for each record selected? I am eventually going to have to generate a seperate report for each selected record.

        <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) {
            // Push all QuoteIDs into new array
            $.each(arrChkBoxes, function (key, value) {
                if (IsPositiveInteger(value)) {

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


        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();

            //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);
                // 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>" +

                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);
                return dt;
            return null;


This question does not have replies that have been liked.