How to use the code class in WINRT ReportViewer?
The WinRT ReportViewer has some limitations in compiling the VB code functions due to the following reasons:
- The reports custom code needs to be compiled against the Microsoft.VisualBasic assemblies and that is not possible in the WinRT platform.
- The assemblies can be compiled in the server side by using the Microsoft.VisualBasic assemblies and loading it in the WinRT; but this also has the similar problem in loading assemblies and does not support the WinRT platform.
In order to use the reports Code and to avoid these limitations, the WINRT ReportViewer has an alternative solution for the custom Code function support. To use this option, reports custom codes need to be written and compiled in the application.
Steps to run the RDL/RDLC custom code in the WINRT ReportViewer:
- Create a new blank Windows Application.
Figure 1: New Windows Application
- Add the necessary assemblies to the application.
Figure 2: Necessary assemblies added
- Create the ReportViewer from XAML. The following code sample shows the same.
XAML
<Page x:Class="CustomCode.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:CustomCode" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:Reports="using:Syncfusion.UI.Xaml.Reports" mc:Ignorable="d"> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Reports:SfReportViewer Name="ReportViewer"/> </Grid> </Page>
- Load the report stream to the ReportViewer and add the DataSource values as given in the following code.
C#
Assembly assembly = typeof(MainPage).GetTypeInfo().Assembly; Stream reportStream = assembly.GetManifestResourceStream("CustomCode.Assets.Pivot Table.rdlc"); this.ReportViewer.ProcessingMode = ProcessingMode.Local; this.ReportViewer.LoadReport(reportStream); this.ReportViewer.DataSources.Add(new ReportDataSource { Name = "Sales", Value = new AdventureWorks().GetData() }); this.ReportViewer.RefreshReport();
- Add a new class Code.cs to the application and specify the namespace Syncfusion.Reports.Helper (for example, namespace Syncfusion.Reports.Helper).
The namespace of the newly created class must be Syncfusion.Reports.Helper (namespace Syncfusion.Reports.Helper)
- Add a new static class with the name of the Code (for example, public static class Code).
- Add the methods with the Static type that is used in your report code functions (for example, GetValueStatus).
C#
namespace Syncfusion.Reports.Helper { public static class Code { public static string GetValueStatus(string value) { double dataValue = Convert.ToDouble(value); if (dataValue >= 80000) return "High Profit"; else if (dataValue >= 40000) return "Moderate Profit"; else return "Average Profit"; } } }
- The executing assembly must be added to the ReportViewer’s Assemblies API in order to process the custom code in the WINRT ReportViewer.
C#
this.ReportViewer.Assemblies.Add(this.GetType().GetTypeInfo().Assembly);
- You can pass a dataset field, Sales, to this function in an expression.
=Code.GetValueStatus(Sum(Fields!Sales.Value))
- Build and Run the application.
Sample Link: https://www.syncfusion.com/downloads/support/directtrac/137390/ze/CustomCode-1989648943.zip