ReportViewer嵌套的SubReport

时间:2010-02-11 17:10:46

标签: nested reportviewer subreport

我有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级任何建议或示例将不胜感激。

由于

1 个答案:

答案 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>()));
            }
        }