C# Winforms应用程序中ReportViewer的筛选器

C# Winforms应用程序中ReportViewer的筛选器,c#,reportviewer,C#,Reportviewer,我有一个视图,它返回我的SQL Server 2012数据库中的数据视图。 视图中的一个字段是“SprintId” 我有一个WinC窗体应用程序,使用VS2012,它有一个窗体,窗体上有一个reportViewer 当我运行它时,我得到了我期望的数据 现在,我需要将SprintId列过滤为某个值。因此,添加一个SprintId=37' 我认为,在rdlc文件中添加一个参数是正确的做法 因此,我添加了一个参数,称之为“SprintId”,将“Type”设置为整数,甚至将默认值设置为37 不过,我不

我有一个视图,它返回我的SQL Server 2012数据库中的数据视图。 视图中的一个字段是“SprintId”

我有一个WinC窗体应用程序,使用VS2012,它有一个窗体,窗体上有一个reportViewer

当我运行它时,我得到了我期望的数据

现在,我需要将SprintId列过滤为某个值。因此,添加一个SprintId=37'

我认为,在rdlc文件中添加一个参数是正确的做法

因此,我添加了一个参数,称之为“SprintId”,将“Type”设置为整数,甚至将默认值设置为37

不过,我不确定将此参数作为where子句分配到何处。我有参数,但没有使用它。在何处将该参数指定给视图

另外,我需要从我的表单中设置参数。 因此,我添加了以下代码:

ReportParameterCollection reportParameters = new ReportParameterCollection();
reportParameters.Add(new ReportParameter("SprintId", "37"));
this.reportViewer1.LocalReport.SetParameters(reportParameters);
然后,默认代码将在以下时间后立即触发:

this.vwSprintDailyBreakdownTableAdapter.Fill(this.Scrum_MasterDataSet.vwSprintDailyBreakdown);
        this.reportViewer1.RefreshReport();
但是,只要我添加参数代码,我的报告就完全是空白的。我做错了什么

编辑:

我试过Romano的代码,这是我现在使用的代码,但是当我运行它时,我得到一个完全空白的报告

    var result = new DataTable();
    DataRow[] res = this.Scrum_MasterDataSet.vwSprintDailyBreakdown.Select("SprintId = 37");

    foreach (DataRow row in res)
    {
        result.ImportRow(row);
    }

    this.vwSprintDailyBreakdownTableAdapter.Fill((Scrum_MasterDataSet.vwSprintDailyBreakdownDataTable)result);
    this.reportViewer1.RefreshReport();
并捕获以下异常: {无法将“System.Data.DataTable”类型的对象强制转换为“vwSprintDailyBreakdownDataTable”。}

您可以创建第二个DataTable,并使用原始表的Select命令筛选数据:

            vwSprintDailyBreakdownDataTable result = new vwSprintDailyBreakdownDataTable();
            DataRow[] res = this.Scrum_MasterDataSet.vwSprintDailyBreakdown.Select("SprintId = 37");

            foreach (DataRow row in res)
            {
                result.ImportRow(row);
            }

            this.vwSprintDailyBreakdownTableAdapter.Fill(result);
            this.reportViewer1.RefreshReport();

你应该考虑的是从数据库中检索数据时过滤数据。 在您的表适配器后面有一个SQL语句,当您调用Fill时,它会被执行。通过右键单击现在包含Fill方法的部分,可以添加用于选择数据的其他方法,例如称为FillFiltered的方法。此方法应采用一个参数,select语句应考虑此参数


然后,您需要调用FillFiltered37而不是调用Fill,并且只从数据库中检索所需的信息。

为什么不首先过滤数据集?我不确定在哪里设置过滤器。您在哪里对数据集应用过滤器,可以从我的winforms应用程序中设置?我得到以下错误:无法从“System.Data.DataTable”转换为“Scrum\u Manager\u UI.Scrum\u MasterDataSet.vwSprintDailyBreakdownDataTable”。这在.Fillresult调用中指出。是您在项目中实现的“Scrum\u Manager\u UI.Scrum\u MasterDataSet.vwSprintDailyBreakdownDataTable”类型。如果是,它是从DataTable派生的吗?不,它来自数据源,它指向一个名为vwSprintDailyBreakdown的视图。Scrum_MasterDataSet是数据源的名称。然后尝试将数据表结果设置为“Scrum_Manager_UI.Scrum_MasterDataSet.vwSprintDailyBreakdownDataTable”类型。我已编辑了该问题。代码可以编译,但由于某些原因,我只得到一个完全空白的报告,异常:{无法将类型为'System.Data.DataTable'的对象强制转换为类型为'vwSprintDailyBreakdownDataTable'。