Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing the SQL Server report viewer control in WPF

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

like image 524
Venkatesh Avatar asked Dec 24 '10 13:12

Venkatesh


1 Answers

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>
like image 81
Zamboni Avatar answered Nov 18 '22 12:11

Zamboni