NullReferenceException Thrown When Showing Report in WinForms Report Viewer
Environment
Product | Progress® Telerik® Reporting |
Version | 19.1.25.521 |
Description
I encounter a NullReferenceException
when attempting to display a report using the WinForms Report Viewer. My NET WinForms application utilizes the embedded report engine and includes the proper Telerik.Licensing
and WinForms Report Viewer NuGet packages.
While the build confirms a valid Telerik Reporting license, running the form crashes at UILicenseProvider.cs
in the ShowWatermark
method due to base.LicenseInfo
being null.
Error Message
Telerik.ReportViewer.WinForms.Licensing.UiLicensePresenter.ShowWatermark(Action showWatermarkCallback)
at Telerik.ReportViewer.Common.TelerikLicensePresenterBase.PresentWatermark(Action showWatermarkCallback)
at Telerik.ReportViewer.WinForms.WinViewer.OnPaint(PaintEventArgs eventArgs)
at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer)
at System.Windows.Forms.Control.WmPaint(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(HWND hWnd, MessageId msg, WPARAM wparam, LPARAM lpa
Cause
The issue occurs when the RefreshReport() method is called before the WinForms Report Viewer is added to a parent form/control. This behavior results in the licensing logic failing.
The issue arises because the WinForms Report Viewer requires a parent form in order to properly execute its licensing logic. Without a parent form, the base.LicenseInfo
property is null
, causing the NullReferenceException
to be thrown.
Solution
To resolve the issue, ensure that the WinForms Report Viewer control is added to a parent form before it starts rendering the report. For example, the reference to the WinForms Report Viewer can be added to the Controls
collection of the parent form before invoking the RefreshReport() method:
private void Form1_Load(object sender, EventArgs e)
{
var reportSource1 = new UriReportSource();
reportSource1.Uri = "Barcodes Report.trdp";
var reportViewer = new Telerik.ReportViewer.WinForms.ReportViewer();
reportViewer.ReportSource = reportSource1;
reportViewer.Dock = System.Windows.Forms.DockStyle.Fill;
reportViewer.Name = "reportViewer1";
reportViewer.TabIndex = 1;
reportViewer.Visible = true;
reportViewer.Size = new System.Drawing.Size(800, 600);
// add report viewer reference to the collection before the RefreshReport() method is invoked and the rendering begins
this.Controls.Add(reportViewer);
reportViewer.RefreshReport();
}