我在网站中使用 ReportViewer 控件,我的报告包含 3 个或更多子报告。子报告中的数据通常不存在,因为它是可选数据。我需要输出一个格式良好且对齐的消息,让读者知道。我有以下代码:
protected void ReportViewer1_SubreportProcessing(object sender, SubreportProcessingEventArgs e)
{
DataTable dtReport = GetReportSub(reportId);
foreach (DataRow drRow in dtReport.Rows)
{
if (Replace(drRow["subName"].ToString(), " ", "") == e.ReportPath)
{
string sSQLMain = SQLReplacer(drRow["subSQL"].ToString());
DataTable dtData = BuildCollectionArray(sSQLMain, new OdbcParameter());
if (dtData.Rows.Count == 0)
{
//TODO: Hide the report and show a friendly message
}
else
{
ReportDataSource dataSource = new ReportDataSource("DS" + Replace(drRow["subName"].ToString(), " ", ""), dtData);
e.DataSources.Add(dataSource);
}
break;
}
}
}
它将获取数据并将其添加到需要它的报告中。但是,如果没有数据,则唯一的选择是 NoRowsMessage 属性。但是,每个子报表的主报表中的 NoRowsMessage 属性过于受限。
理想情况下,我希望每个子报告都使用 exporession 或代码来处理 no rows 消息本身。然而,微软工作方式的缺陷似乎是该报告以有数据显示为条件。