Programmatic report creation - majorsilence/Reporting GitHub Wiki

Programmatic report creation requires Majorsilence.Reporting.RdlCreator / Majorsilence.Reporting.RdlCreator.SkiaSharp 5.0.4-alpha or newer.

<PackageReference Include="Majorsilence.Reporting.RdlCreator" />

This is experimental and is subject to change.

Example report from sql query.

using Majorsilence.Reporting.RdlCreator;

// One time per app instance
RdlEngineConfig.RdlEngineConfigInit();

var create = new Majorsilence.Reporting.RdlCreator.Create();

var fyiReport = await create.GenerateRdl(dataProvider,
    connectionString,
    "SELECT CategoryID, CategoryName, Description FROM Categories",
    pageHeaderText: "DataProviderTest TestMethod1");

string filepath = System.IO.Path.Combine(Environment.CurrentDirectory, "PLACEHOLDER.pdf");
var ofs = new Majorsilence.Reporting.Rdl.OneFileStreamGen(filepath, true);
await fyiReport.RunGetData(null);
await fyiReport.RunRender(ofs, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF);

Programmatic manual report

using Majorsilence.Reporting.RdlCreator;

// One time per app instance
RdlEngineConfig.RdlEngineConfigInit();

var report = new Majorsilence.Reporting.RdlCreator.Report
 {
     Description = "Sample report",
     Author = "John Doe",
     PageHeight = "11in",
     PageWidth = "8.5in",
     Width = "7.5in",
     TopMargin = ".25in",
     LeftMargin = ".25in",
     RightMargin = ".25in",
     BottomMargin = ".25in",
     DataSources = new DataSources
     {
         DataSource = new DataSource
         {
             Name = "DS1",
             ConnectionProperties = new ConnectionProperties
             {
                 DataProvider = dataProvider,
                 ConnectString = connectionString
             }
         }
     },
     DataSets = new DataSets
     {
         DataSet = new DataSet
         {
             Name = "Data",
             Query = new Query
             {
                 DataSourceName = "DS1",
                 CommandText = "SELECT CategoryID, CategoryName, Description FROM Categories"
             },
             Fields = new Fields
             {
                 Field = new List<Field>
                 {
                     new Field { Name = "CategoryID", DataField = "CategoryID", TypeName = "System.Int64" },
                     new Field { Name = "CategoryName", DataField = "CategoryName", TypeName = "System.String" },
                     new Field { Name = "Description", DataField = "Description", TypeName = "System.String" }
                 }
             }
         }
     },
     PageHeader = new PageHeader
     {
         Height = ".5in",
         ReportItems = new ReportItemsHeader
         {
             Textbox = new Text
             {
                 Name = "Textbox1",
                 Top = ".1in",
                 Left = ".1in",
                 Width = "6in",
                 Height = ".25in",
                 Value = new Value { Text = "Test Data Set Report" },
                 Style = new Style { FontSize = "15pt", FontWeight = "Bold" }
             }
         },
         PrintOnFirstPage = "true",
         PrintOnLastPage = "true"
     },
     Body = new Body
     {
         ReportItems = new ReportItemsBody
         {
             Table = new Table
             {
                 TableName = "Table1",
                 DataSetName = "Data",
                 NoRows = "Query returned no rows!",
                 TableColumns = new TableColumns
                 {
                     TableColumn = new List<TableColumn>
                 {
                     new TableColumn { Width = "1.25in" },
                     new TableColumn { Width = "1.5in" },
                     new TableColumn { Width = "1.375in" }
                 }
                 },
                 Header = new Header
                 {
                     TableRows = new TableRows
                     {
                         TableRow = new TableRow
                         {
                             Height = "12pt",
                             TableCells = new TableCells()
                             {
                                 TableCell = new List<TableCell>
                                 {
                                     new TableCell {  ReportItems= new TableCellReportItems(){ ReportItem = new Text { Name = "Textbox2",
                                         Value = new Value { Text = "CategoryID" },
                                         Style = new Style { TextAlign = "Center", FontWeight = "Bold" } } } },
                                     new TableCell { ReportItems= new TableCellReportItems(){ReportItem = new Text { Name = "Textbox3",
                                         Value = new Value { Text = "CategoryName" },
                                         Style = new Style { TextAlign = "Center", FontWeight = "Bold" } } } },
                                     new TableCell { ReportItems= new TableCellReportItems(){ReportItem = new Text { Name = "Textbox4",
                                         Value = new Value { Text = "Description" },
                                         Style = new Style { TextAlign = "Center", FontWeight = "Bold" } } } }
                                 }
                             }
                         }
                     },
                     RepeatOnNewPage = "true"
                 },
                 Details = new Details
                 {
                     TableRows = new TableRows
                     {
                         TableRow = new TableRow
                         {
                             Height = "12pt",
                             TableCells = new TableCells()
                             {
                                 TableCell = new List<TableCell>
                                 {
                                     new TableCell {
                                         ReportItems= new TableCellReportItems()
                                         {
                                              ReportItem = new CustomReportItems()
                                              {
                                                  Name = "QrCode",
                                                  Type = "QR Code",
                                                  Width = "35.91mm",
                                                  Height = "35.91mm",
                                                  CustomProperties = new CustomProperties
                                                  {
                                                      CustomProperty = new CustomProperty()
                                                      {
                                                         Name = "QrCode",
                                                         Value = "=Fields!CategoryID.Value"
                                                      }
                                                  },
                                                 CanGrow="true",
                                                 Style = new Style
                                                 {
                                                     BorderStyle= new BorderStyle
                                                     {
                                                         Default="None",
                                                         Bottom="Solid"
                                                     },
                                                     BorderColor=new BorderColor
                                                     {
                                                         Bottom = "Gray"
                                                     },
                                                     BorderWidth= new BorderWidth
                                                     {
                                                         Bottom="1pt"
                                                     }

                                                 }
                                              }
                                         }
                                     },
                                     new TableCell
                                     {
                                         ReportItems = new TableCellReportItems()
                                         {
                                             ReportItem = new Text {
                                                 Name = "CategoryName",
                                                 Value = new Value
                                                  {
                                                     Text = "=Fields!CategoryName.Value"
                                                 },
                                                 CanGrow = true,
                                                 Style = new Style
                                                 {
                                                     BorderStyle= new BorderStyle
                                                     {
                                                         Default="None",
                                                         Bottom="Solid"
                                                     },
                                                     BorderColor=new BorderColor
                                                     {
                                                         Bottom = "Gray"
                                                     },
                                                     BorderWidth= new BorderWidth
                                                     {
                                                         Bottom="1pt"
                                                     }

                                                 }
                                             }
                                         }
                                     },
                                     new TableCell
                                     {
                                         ReportItems= new TableCellReportItems()
                                         {
                                             ReportItem = new Text
                                             {
                                                 Name = "Description",
                                                 Value = new Value
                                                 {
                                                     Text = "=Fields!Description.Value"
                                                 },
                                                 CanGrow = true,
                                                 Style = new Style
                                                 {
                                                     BorderStyle= new BorderStyle
                                                     {
                                                         Default="None",
                                                         Bottom="Solid"
                                                     },
                                                     BorderColor=new BorderColor
                                                     {
                                                         Bottom = "Gray"
                                                     },
                                                     BorderWidth= new BorderWidth
                                                     {
                                                         Bottom="1pt"
                                                     }

                                                 }
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         },
         Height = "36pt"
     },
     PageFooter = new PageFooter
     {
         Height = "14pt",
         ReportItems = new ReportItemsFooter
         {
             Textbox = new Text
             {
                 Name = "Textbox5",
                 Top = "1pt",
                 Left = "10pt",
                 Height = "12pt",
                 Width = "3in",
                 Value = new Value { Text = "=Globals!PageNumber + ' of ' + Globals!TotalPages" },
                 Style = new Style { FontSize = "10pt", FontWeight = "Normal" }
             }
         },
         PrintOnFirstPage = "true",
         PrintOnLastPage = "true"
     }
 };

var create = new Majorsilence.Reporting.RdlCreator.Create();
var fyiReport = await create.GenerateRdl(report);
using var ms = new Majorsilence.Reporting.Rdl.MemoryStreamGen();
await fyiReport.RunGetData(null);
await fyiReport.RunRender(ms, Majorsilence.Reporting.Rdl.OutputPresentationType.PDF);
var pdfStream = ms.GetStream();
⚠️ **GitHub.com Fallback** ⚠️