Hallo,
ich möchte in einer WPF-Anwendung Daten einer MS-Access Datenbank als Bericht darstellen.
Die Darstellung funktioniert auch soweit, nur schaffe ich es nicht den Report z.B. durch betätigen eines Buttons zu aktualisieren.
Wenn ich Daten der Datenbank ändere oder neue hinzufüge, zeigt der ReportViewer immer noch dieselben Daten wie zu Beginn. Erst wenn man das Programm neu startet werden die Änderungen im ReportViewer ersichtlich.
Kann mir da vielleicht jemand weiterhelfen?
Das ganze habe ich nach folgendem Muster gemacht:
Exemplarische Vorgehensweise: Verwenden von ReportViewer in einer WPF-Anwendung
<Window x:Class="WpfReportApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:rv="clr-namespace:Microsoft.Reporting.WinForms;assembly=Microsoft.ReportViewer.WinForms"
Title="MainWindow" Height="350" Width="525">
<Grid>
<WindowsFormsHost>
<rv:ReportViewer x:Name="_reportViewer"/>
</WindowsFormsHost>
</Grid>
</Window>
public MainWindow()
{
InitializeComponent();
_reportViewer.Load += ReportViewer_Load;
}
private bool _isReportViewerLoaded;
private void ReportViewer_Load(object sender, EventArgs e)
{
if (!_isReportViewerLoaded)
{
Microsoft.Reporting.WinForms.ReportDataSource reportDataSource1 = new Microsoft.Reporting.WinForms.ReportDataSource();
AdventureWorks2008R2DataSet dataset = new AdventureWorks2008R2DataSet();
dataset.BeginInit();
reportDataSource1.Name = "DataSet1"; //Name of the report dataset in our .RDLC file
reportDataSource1.Value = dataset.SalesOrderDetail;
this._reportViewer.LocalReport.DataSources.Add(reportDataSource1);
this._reportViewer.LocalReport.ReportEmbeddedResource = "<VSProjectName>.Report1.rdlc";
dataset.EndInit();
//fill data into adventureWorksDataSet
AdventureWorks2008R2DataSetTableAdapters.SalesOrderDetailTableAdapter salesOrderDetailTableAdapter = new AdventureWorks2008R2DataSetTableAdapters.SalesOrderDetailTableAdapter();
salesOrderDetailTableAdapter.ClearBeforeFill = true;
salesOrderDetailTableAdapter.Fill(dataset.SalesOrderDetail);
_reportViewer.RefreshReport();
_isReportViewerLoaded = true;
}
}
Ich habe es schon geschafft, aber trotzdem vielen Dank.
connection.Open();
OleDbDataAdapter rDA = new OleDbDataAdapter("SELECT * FROM [Tabelle1]", connection);
DataTable rDT = new DataTable();
rDA.Fill(rDT);
connection.Close();
this._reportViewer.Reset();
this._reportViewer.LocalReport.DataSources.Clear();
this._reportViewer.LocalReport.ReportPath = @"..\Report1.rdlc"; //Pfad des Reports
Microsoft.Reporting.WinForms.ReportDataSource rDS = new Microsoft.Reporting.WinForms.ReportDataSource("DataSet1", rDT);
this._reportViewer.LocalReport.DataSources.Add(rDS);
this._reportViewer.RefreshReport();