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