2016-09-01 4 views
0

Ich habe einen ReportViewer in einem WindowsFormHost erstellt. Hier ist mein XAML-Code.Wie kann ich Daten aus einem Dataset in einem ReportViewer anzeigen?

<Grid x:Name="grdPrintingGrid" Visibility="Visible" Height="440" Margin="105, 0, 0 0" VerticalAlignment="Top" Grid.ColumnSpan="2" > 
     <TextBox x:Name="txtPRTTitle" IsReadOnly="True" HorizontalAlignment="Left" Height="32" Margin="10,4,0,0" VerticalAlignment="Top" Width="450" FontFamily="Arial" FontSize="18.667" Background="#FFE8F9FF" BorderThickness="0"/> 
     <WindowsFormsHost x:Name="wfhFormsHost" Visibility="Hidden" HorizontalAlignment="Left" Height="312" Margin="10,54,0,0" VerticalAlignment="Top" Width="683"> 
      <rv:ReportViewer x:Name="rvWeeklyList" /> 
     </WindowsFormsHost> 

     <Grid x:Name="grdPWLGrid" Visibility="Visible" Height="440" Margin="0, 0, 0 0" VerticalAlignment="Top"> 
      <DataGrid IsReadOnly="True" Name="dgPWLCGrid" ScrollViewer.HorizontalScrollBarVisibility="Hidden" Background="#FFE8F9FF" HorizontalAlignment="Left" VerticalAlignment="Top" Height="255" Margin="10,62,0,0" Width="693" BorderThickness="1" BorderBrush="Black" CanUserResizeRows="False" > 
      </DataGrid> 

      <Button x:Name="btnPWLPrint" Content="Print" HorizontalAlignment="Left" Height="26" Margin="307,388,0,0" VerticalAlignment="Top" Width="74" FontFamily="Arial" FontSize="14.667" Background="#FFEEFFFF" Click="btnPWLPrint_Click"/> 
     </Grid> 
    </Grid> 

Ich rufe eine gespeicherte Prozedur in meiner Datenbank auf, um die Daten zu erhalten. Ich verwende den Berichtsassistenten, um meinen Bericht rdlc zu erstellen. Ich nannte es PrintWeeklyList.rdlc. Für Wählen Sie einen DataSource-Typ Ich wählte Datenbank. Für Wählen Sie ein Datenbankmodell Wählen Sie DataSet. Als Datenbankobjekt wähle ich eine gespeicherte Prozedur namens GetPrintWeeklyListData. Ich gab der Datenquelle den Namen . Ich gab dem DataSet den Namen PrintWeeklyListDS.

Hier ist mein C# -Code die das Reportviewer zu laden:

private void RVWeeklyList_Load(object sender, EventArgs e) 
{ 
     if (!isReportViewerLoaded) 
     { 
      ReportViewer rvWeeklyList = new ReportViewer(); 

      Microsoft.Reporting.WinForms.ReportDataSource reportDataSource1 = 
       new Microsoft.Reporting.WinForms.ReportDataSource(); 

      PrintWeeklyListDataSet dataset = new PrintWeeklyListDataSet(); 

      dataset.BeginInit(); 

      reportDataSource1.Name = "PrintWeeklyListDS"; //Name of the report dataset in our .RDLC file 
      reportDataSource1.Value = dataset.GetPrintWeeklyListData; 
      rvWeeklyList.LocalReport.DataSources.Add(reportDataSource1); 

      //rvWeeklyList.ServerReport.GetDataSources(); 
      rvWeeklyList.ProcessingMode = Microsoft.Reporting.WinForms.ProcessingMode.Local; 
      rvWeeklyList.LocalReport.ReportEmbeddedResource = "PrintWeeklyList.rdlc"; 

      dataset.EndInit(); 
      PrintWeeklyListDataSetTableAdapters.GetPrintWeeklyListDataTableAdapter pwlTableAdapter = 
       new PrintWeeklyListDataSetTableAdapters.GetPrintWeeklyListDataTableAdapter(); 
      pwlTableAdapter.ClearBeforeFill = true; 
      pwlTableAdapter.Fill(dataset.GetPrintWeeklyListData); 


      rvWeeklyList.LocalReport.Refresh(); 
      rvWeeklyList.RefreshReport(); 


      isReportViewerLoaded = true; 
     } 
    } 

Wenn ich Schritt durch den Code ich sehe, dass beide Daten-Set und rvWeeklyList in ihnen die Daten aus der gespeicherten Prozedur haben. Ich habe Google gesucht und kann nicht herausfinden, was mir fehlt, damit die Daten angezeigt werden. Jedes Codebeispiel würde sehr geschätzt werden.

Antwort

0

Erstens ändern sie WindowsFormsHost zu Visibility="Visible"

Zweitens, stellen Sie sicher, dass die PrintWeeklyList.rdlc der Datei Build Action auf Embedded Resource gesetzt

nun den überarbeiteten Code unten verwenden und sicher sein, den Teil <VisualStudioProjectName> mit dem Namen Visual ersetzen Studio-Projekt für die ReportEmbeddedResource:

public MainWindow() 
{ 
    InitializeComponent(); 
    rvWeeklyList.Load += RVWeeklyList_Load; 
} 

private void RVWeeklyList_Load(object sender, EventArgs e) 
{ 
    if (!isReportViewerLoaded) 
    { 
     Microsoft.Reporting.WinForms.ReportDataSource reportDataSource1 = 
      new Microsoft.Reporting.WinForms.ReportDataSource(); 

     PrintWeeklyListDataSet dataset = new PrintWeeklyListDataSet(); 

     dataset.BeginInit(); 

     reportDataSource1.Name = "PrintWeeklyListDS"; 
     reportDataSource1.Value = dataset.GetPrintWeeklyListData; 
     rvWeeklyList.LocalReport.DataSources.Add(reportDataSource1); 

     rvWeeklyList.LocalReport.ReportEmbeddedResource = 
      @"<VisualStudioProjectName>.PrintWeeklyList.rdlc"; 

     dataset.EndInit(); 

     PrintWeeklyListDataSetTableAdapters.GetPrintWeeklyListDataTableAdapter pwlTableAdapter = 
      new PrintWeeklyListDataSetTableAdapters.GetPrintWeeklyListDataTableAdapter(); 
     pwlTableAdapter.ClearBeforeFill = true; 
     pwlTableAdapter.Fill(dataset.GetPrintWeeklyListData); 

     rvWeeklyList.RefreshReport(); 

     isReportViewerLoaded = true; 
    } 
} 

MSDN-Artikel Referenz: https://msdn.microsoft.com/en-us/library/hh273267.aspx

+0

#sly - Ich habe die Änderungen vorgenommen, die Sie vorgeschlagen haben. Ich erhalte jetzt den folgenden Fehler: "Während der lokalen Berichtsverarbeitung ist ein Fehler aufgetreten. Die Berichtsdefinition für den Bericht 'PrintWeeklyList' wurde nicht angegeben. Der Verweis des Objekts wurde nicht auf eine Instanz eines Objekts gesetzt." – Cass

+0

@Cass Können Sie mir sagen, wie der Name des Visual Studio-Projekts lautet? Ich denke, dass die ReportEmbeddedResource-Zeichenfolge immer noch falsch ist. Wenn möglich, lass mich wissen, worauf es eingestellt ist. – sly

+0

#sly - Ich entschuldige mich. Ich habe vergessen, den durch meinen Projektnamen zu ersetzen. Sobald ich es behoben habe, wird der Bericht angezeigt. Vielen Dank! – Cass

Verwandte Themen