Introduction
This article shows how to add a RDLC report in WPF.
Suppose I have been assigned the task of generating a RDLC report in WPF.
That contains ID, Name, City, and Order Amount.
So I will show you how to generate a RDLC report in WPF.
It is very simple; believe me it is very simple. So let's start.
Step 1
Create a WPF project; I named it "MonsterBusinessInc".
![RDLCWPF1.jpg]()
Step 2
Add a WPF Button, the click event of this button will show you the report; also add the click event for this button.
![RDLCWPF2.jpg]()
private void btnClickMe_Click(object sender, RoutedEventArgs e)
{
}
Step 3
Add a class in the project under the Entitles folder named "Customer.cs".
Write the code like below:
namespace MonsterBusinessInc.Entities
{
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
public string City { get; set; }
public int OrderAmount { get; set; }
}
}
Build the project after doing it.
Step 4
Add an .rdlc file named "CustomerReport.rdlc".
![RDLCWPF3.jpg]()
Now we have to add the dataset for this report that will be filled at run time when we display the report; i.e. ID, Name, City etc.
![RDLCWPF4.jpg]()
Click the DataSet on the Report Data window and the DataSet Properties window will open. Now we must set the properties.
![RDLCWPF5.jpg]()
Set the name to "CustomerDataSet". Now click on the "New" Button; the DataSource Window will open.
![RDLCWPF6.jpg]()
Select Object and click the "Next" Button.
![RDLCWPF7.jpg]()
Now select the Customer Class under Entities that we created earlier and click the "Finish" button.
![RDLCWPF8.jpg]()
Now click on the "OK" button and a DataSet will be added for the Customer.rdlc report.
And you can see it in the Report Data Window.
![RDLCWPF9.jpg]()
Now right-click on the blank white area and select the table.
![RDLCWPF10.jpg]()
Now you will have a blank table in the surface.
Click in the blank field; set the filed name. You also can edit the header for the field.
![RDLCWPF11.jpg]()
![RDLCWPF12.jpg]()
Now we have a .rdlc report ready to display records after supplying the datasource.
Step 5
Add a User Control in the "User Control" folder in the project named "ReportViewer.xaml".
![RDLCWPF13.jpg]()
This reportViewer user control will contain the RDLC report.
Now add two DLLs as references.
The first one is Microsoft.ReportViewer.WinForms .
![RDLCWPF14.jpg]()
The second one is WindowsFormsIntegration.
![RDLCWPF15.jpg]()
Now add the following line in your "ReportViewer.xaml":
xmlns:rv="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms"
and
<WindowsFormsHost>
<rv:ReportViewer x:Name="reportViewer" RenderingComplete="reportViewer_RenderingComplete" />
</WindowsFormsHost>
Now the file will look like:
<UserControl x:Class="MonsterBusinessInc.User_Control.ReportViewer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:rv="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms"
mc:Ignorable="d"
d:DesignHeight="600" d:DesignWidth="800" Loaded="UserControl_Loaded"
>
<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<WindowsFormsHost>
<rv:ReportViewer x:Name="reportViewer" RenderingComplete="reportViewer_RenderingComplete" />
</WindowsFormsHost>
</Grid>
</UserControl>
On the UserControl_Loaded event write the following code.
We can bind the report with the database table from the SQL Server database but now I have generated a DataTable at run time with the same fields details Customer.cs under the Entities folder.
using System.Data;
using Microsoft.Reporting.WinForms;
namespace MonsterBusinessInc.User_Control
{
/// <summary>
/// Interaction logic for ReportViewer.xaml
/// </summary>
public partial class ReportViewer : UserControl
{
public ReportViewer()
{
InitializeComponent();
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn ("ID",typeof(int)));
dt.Columns.Add(new DataColumn("Name", typeof(string)));
dt.Columns.Add(new DataColumn("City", typeof(string)));
dt.Columns.Add(new DataColumn("OrderAmount", typeof(int)));
DataRow dr = dt.NewRow();
dr["ID"] = 1;
dr["Name"] = "CK Nitin";
dr["City"] = "New York";
dr["OrderAmount"] = 100;
dt.Rows.Add(dr);
ReportDataSource reportDataSource = new ReportDataSource();
reportDataSource.Name = "CustomerReport"; // Name of the DataSet we set in .rdlc
reportDataSource.Value = dt;
reportViewer.LocalReport.ReportPath = "D:\\MonsterBusinessInc \\Report\\CustomerReport.rdlc"; // Path of the rdlc file
reportViewer.LocalReport.DataSources.Add(reportDataSource);
reportViewer.RefreshReport();
}
private void reportViewer_RenderingComplete(object sender, Microsoft.Reporting.WinForms.RenderingCompleteEventArgs e)
{
}
}
}
Step 7
Now add a window named "CustomerReport.xaml".
Write the following XAML for this XAML file:
<Window x:Class="Reporting.CustomerReport"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="CustomerReport" Height="600" Width="300"
xmlns:report="clr-namespace:Reporting.User_Control">
<Grid>
<report:ReportViewer ></report:ReportViewer>
</Grid>
</Window>
![RDLCWPF3.jpg]()
Step 8
Now the last step.
Open the MainWindows.xaml
Write the following code in the button click:
CustomerReport rpt = new CustomerReport();
rpt.ShowDialog();
private void btnClickMe_Click(object sender, RoutedEventArgs e)
{
CustomerReport rpt = new CustomerReport();
rpt.ShowDialog();
}
Now Build the project and run it.
Here is the output.
OUTPUT
![RDLCWPF17.jpg]()