Wednesday, December 7, 2016

Dynamic columns width in RDLC

I am trying to generate a RDLC report in ASP.NET where the columns of my Dataset will be dynamic and determined only at run time.

 public DataTable GetTable(int type)
        {
            DataTable table = new DataTable();
            if (type == 1)
            {
                table.Columns.Add("Dosage", typeof(int));
                table.Columns.Add("Drug", typeof(string));
                table.Columns.Add("Patient", typeof(string));
                table.Columns.Add("Date", typeof(DateTime));
                table.Columns.Add("testColumn", typeof(DateTime));

                // Here we add five DataRows.
                table.Rows.Add(25, "Indocin", "Jignesh", DateTime.Now);
                table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
                table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
                table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
                table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
            }
            else
            {
                table.Columns.Add("Dosage", typeof(int));
                table.Columns.Add("Patient", typeof(string));
                table.Columns.Add("Date", typeof(DateTime));

                // Here we add five DataRows.
                table.Rows.Add(25, "Jignesh", DateTime.Now);
                table.Rows.Add(50, "Sam", DateTime.Now);
                table.Rows.Add(10, "Christoff", DateTime.Now);
                table.Rows.Add(21, "Janet", DateTime.Now);
                table.Rows.Add(100, "Melanie", DateTime.Now);
            }

            return table;
        }



  public ActionResult GenerateReportList()
        {
            var reportDataSource = new List();
            var localReport = new LocalReport();
            var path = GeLocCommon.ReportCommonPath + GeLocCommon.RightsReport;
            path = Server.MapPath(path + GeLocCommon.M02_details);
            if (System.IO.File.Exists(path))
            {
                localReport.ReportPath = path;
            }
            else
            {
                return RedirectToAction("Index");
            }

            var data = GetTable(1);
            reportDataSource.Add(new ReportDataSource
            {
                Name = GeLocCommon.RightsDetailDataSet,
                Value = data
            });


            localReport = localReport.LocalizeReport();
            var totalWidth = (float)7.215;
            totalWidth = totalWidth / data.Columns.Count;
            var resizedcolumns = "< TablixColumns >";
            for (int i = 0; i < data.Columns.Count; i++)
            {
                resizedcolumns = resizedcolumns + "<  TablixColumn > < Width>" + totalWidth + "in</ Width>< /TablixColumn  >";
            }

            for (int i = data.Columns.Count; i < 5; i++)
            {
                resizedcolumns = resizedcolumns + "< TablixColumn ><  Width >0.1in</  Width  ><  /TablixColumn  >";
            }

            resizedcolumns = resizedcolumns + "<  /TablixColumns  >";
            resizedcolumns = resizedcolumns.ToString().Replace(",", ".");
            var rptxml = System.IO.File.ReadAllText(path);
            var start = rptxml.IndexOf("< TablixColumns >");
            var end = rptxml.IndexOf("< /TablixColumns  >") + " < /  TablixColumns  >".Length;
            rptxml = rptxml.Substring(0, start) + resizedcolumns + rptxml.Substring(end);
            System.IO.TextReader tr = new System.IO.StringReader(rptxml);
            localReport.LoadReportDefinition(tr);
            tr.Close();
            var downloadedFileName = GeLocCommon.RightsReportTemplate + 1 + GeLocCommon.SeperatorDash + DateTime.Now.ToString(GeLocCommon.ReportGeneratedDateFormat) + GeLocCommon.SeperatorDot + "pdf";
            string mimeType;
            return File(localReport.GenerateReport(ExportDataType.Pdf.ToString(), reportDataSource, null, out mimeType, false), mimeType, downloadedFileName);
        }




 

2 comments: