首页 > 解决方案 > C# WPF 和 SQL Server 报告

问题描述

我有一个数据库,我正在尝试从中打印报告。我的数据输入是通过 C# WPF 应用程序完成的,因此我在主视图 (MVVM) 上添加了一个“打印”按钮,用于创建新窗口和视图模型。该窗口有一个 windowsFormsHost 并创建了一个 ReportViewer 控件:

public partial class Report : Window
{
    private bool _isReportViewerLoaded;
    public Report(FlatObservationViewModel vm)
    {
        InitializeComponent();
        _reportViewer.Load += ReportViewer_Load;
    }

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

            this._reportViewer.LocalReport.ReportEmbeddedResource = "MOATools.FieldObervationReport.rdlc";

            _reportViewer.RefreshReport();
            _isReportViewerLoaded = true;
        }
    }

}

使用报告设计器我创建了报告 (FieldObervationReport.rdlc),它有一个拼写错误,当我弄清楚所有这些时我会修复它,但现在我正在使用它。报表设计器允许我从 ReportData 窗格添加数据集/数据源,并且我正在尝试使用专门为报表设置的视图模型类:

public class FlatObservationViewModel : ViewModelBase
{
    public FlatObservationViewModel(Projectinformation p, Reportinformation r, PMToolsDCDataContext dc)
    {
        Project = p;
        Report = r;
        Obs = new ObservableObservations(dc, r.Reportdate, p.ID);
    }

    public Projectinformation Project { get; set; }
    public Reportinformation Report { get; set; }
    public ObservableObservations Obs { get; set; }
    public int DivNum { get; set; }
    public int ObsNum { get; set; }
    public string DivName { get; set; }
    public string Desc { get; set; }
    public string OpenDate { get; set; }
    public string CloseDate { get; set; }
}

当我将 DataSet 添加到报告中时,我将其命名为 ReportVMDS,它显示了我想要的 ViewModel 类中的所有字段。但我不知道如何设置 ReportViewer 以正确绑定到我在 Visual Studio GUI 中设置的数据集和数据源。因为我有一个 WPF 应用程序,所以我没有将 Windows 窗体控件拖到 WindowsFormsHost 上,而且我找到的所有教程都是基于在 GUI 中设置 ReportViewer。我认为 ReportViewer_Load 处理程序是我需要添加数据集并对其进行初始化的地方,但是 reportdesigner 设置的数据集(ReportVMDS)不是一个有效的类,所以如果我尝试这个:

ReportVMDS dataset = new ReportVMDS();

我收到错误:“找不到类型或命名空间”,并且代码中的红色波浪线下划线。当我运行程序并按下打印按钮时,我的窗口打开并告诉我尚未提供数据源实例。

因此,我认为我需要一些关于如何使用 DI 将我的报告与我的视图模型连接起来,然后让 GUI 报告设计也与带有 DataSource 和 DataSet 的视图模型一起工作的指针。

任何帮助表示赞赏!如果这有什么不同,我正在使用 LinqToSQL 来填充我的视图模型。

标签: c#sql-serverwpfrdlc

解决方案


推荐阅读