Reputation: 320
I have tried to do use the report viewer that comes with VS2010 in WPF. I created the report and tested the same with a windows application it works. Then I used the same RDLC file in the WPF with the same set of parameters but it fails. The code I'm using is as below MainWindow.xaml.cs
public MainWindow()
{
ObjectModel DataObject = new ObjectModel();
DataObject.SetEPSDetails();
WindowsFormsHost host = new WindowsFormsHost();
ReportViewer RptViewer = new ReportViewer();
host.Child = RptViewer;
Grid HostGrid = this.FindName("GrdRow") as Grid;
HostGrid.Children.Add(host);
RptViewer.ProcessingMode = ProcessingMode.Local;
RptViewer.LocalReport.ReportEmbeddedResource = "RDLWPF.PrintPreview.rdlc";
RptViewer.LocalReport.SetParameters(new Microsoft.Reporting.WinForms.ReportParameter("Payer", DataObject.Payer));
RptViewer.LocalReport.SetParameters(new Microsoft.Reporting.WinForms.ReportParameter("ValueDate", DataObject.ValueDate));
RptViewer.LocalReport.SetParameters(new Microsoft.Reporting.WinForms.ReportParameter("FileName", DataObject.FileName));
RptViewer.LocalReport.SetParameters(new Microsoft.Reporting.WinForms.ReportParameter("Description", DataObject.Description));
RptViewer.LocalReport.SetParameters(new Microsoft.Reporting.WinForms.ReportParameter("PrintedDate", DataObject.PrintDate));
RptViewer.LocalReport.SetParameters(new Microsoft.Reporting.WinForms.ReportParameter("FileLastUpdated", DataObject.FileLastUpdated));
RptViewer.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("FileDetails", DataObject.EPSDetails));
RptViewer.RefreshReport();
}
The Xaml is as below Mainwindow.Xaml
<Window x:Class="RDLWPF.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewer="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms"
Title="MainWindow" Height="350" Width="525" AllowsTransparency="False" >
<Grid x:Name="GrdRow">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
</Grid>
I just getting the empty XAML window. The report control is also not displayed. I know I'm doing a mistake but could not find what it is. Is there some on who can correct this for me. Also if some one could send me a code sample in MVVM appraoch that would also be great
Thanks and regards Venkatesh
Upvotes: 5
Views: 3254
Reputation: 8043
Here is what I did to make the SQL Report Viewer appear in my WPF application:
1- Add a project reference to WindowsFormsIntegation
2- Add a project reference to Microsoft.ReportViewer.Winforms
3- Add a project reference to Microsoft.ReportViewer.Common
4- Define a WindowsFormsHost in my view model
public MainWindowViewModel()
{
ReportViewer reportViewer = new ReportViewer();
_viewer.Child = reportViewer;
}
private WindowsFormsHost _viewer = new WindowsFormsHost();
public WindowsFormsHost Viewer
{
get
{
return _viewer;
}
set
{
_viewer = value;
NotifyPropertyChanged("Viewer");
}
}
4- Bind a reference to the view model from the view
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<ContentPresenter Grid.Row="0" Content="{Binding Viewer}" />
</Grid>
Upvotes: 5