我有4份报告报告A,报告B,报告C和报告D,分别包含数据源dsA,dsB,dsC和dsD。
报告A是主报告,其子报告B具有子报告C ...
报告A使用ReportA中的参数填充SubreportProcessingEvent中的数据源dsB。
我需要为报告B中的每一行触发一个事件,以便从报告B传递参数并将报告C和C参数填充到报告D ....
SubreportProcessingEventArg中的代码
SearchValue = new SqlParameter[2];
SqlConnection thisConnection = new SqlConnection(thisConnectionString);
DataSet thisDataSet = new DataSet();
SearchValue[0] = new SqlParameter("@TPlanId", e.Parameters[1].Values[0]);
SearchValue[1] = new SqlParameter("@ProblemId", e.Parameters[0].Values[0]);
thisDataSet = SqlHelper.ExecuteDataset(thisConnection, "Proc_TP_Goal", SearchValue);
/* Associate thisDataSet (now loaded with the stored procedure result) with the ReportViewer datasource */
ReportDataSource datasource = new ReportDataSource("Goal_Proc_TP_Goal", thisDataSet.Tables[0]);
e.DataSources.Add(datasource);
我无法弄清楚事件处理程序的第3级和第4级任何建议或示例将不胜感激。
由于
答案 0 :(得分:1)
我这样做,我在子子报表中有一个参数传递子报表的行。我希望你理解,如果不让我知道,我会发布一个源代码。
if ("RendicionDetalleCodigosReporte".Equals(e.ReportPath))
{
if (data != null)
{
RendicionDetalleData detalle = new RendicionDetalleData();
detalle.row = 0;
int row = Convert.ToInt32(e.Parameters[0].Values[0]);
foreach (var det in data.Detalles)
{
if (det.row.Equals(row))
{
detalle = det;
break;
}
}
if (detalle.row == 0)
{
e.DataSources.Add(new ReportDataSource("RendicionDetalleCodigo", new List<RendicionDetalleCodigosData>()));
}
else
{
e.DataSources.Add(new ReportDataSource("RendicionDetalleCodigo", detalle.Codigos));
}
}
else
{
e.DataSources.Add(new ReportDataSource("RendicionDetalleCodigo", new List<RendicionDetalleCodigosData>()));
}
}
else
{
if (data != null)
{
e.DataSources.Add(new ReportDataSource("RendicionDetalle", data.Detalles));
}
else
{
e.DataSources.Add(new ReportDataSource("RendicionDetalle", new List<RendicionDetalleData>()));
}
}