我有一个视图,可以从我的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();