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

我有一个使用VS2012的C#WinForms应用程序,该应用程序具有表单,并且在该表单上是reportViewer。

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

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

我认为,在rdlc文件上添加参数是正确的方法。

因此,我添加了一个参数,将其称为“ SprintId”,将“类型”设置为Integer,甚至将默认值设置为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();

10-08 07:54