2

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

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

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

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

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

因此,我添加了一个参数,将其命名为“SprintId”,将“Type”设置为 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'。”}

4

2 回答 2

0

您应该考虑的是在从数据库中检索数据时过滤数据。

在您的表适配器后面有一条 SQL 语句,当您调用Fill. 您可以通过右键单击现在包含该Fill方法的部分,添加用于选择数据的其他方法,例如名为FillFiltered. 此方法应接受一个参数,并且 select 语句应考虑此参数。

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

于 2013-07-10T12:28:29.130 回答
0

您可以创建第二个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();
于 2013-07-10T07:17:33.583 回答