ReportViewer вложенный вложенный отчет - PullRequest
0 голосов
/ 11 февраля 2010

У меня есть 4 отчета: отчет A, отчет B, отчет C и отчет D с источниками данных dsA, dsB, dsC и dsD соответственно.

Отчет A - это основной отчет, в котором есть подотчет B, есть подотчет C ...

Отчет A заполняет dsB источника данных в SubreportProcessingEvent параметром из ReportA.

Мне нужно событие, которое вызывается для каждой строки в отчете 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 Ответ

1 голос
/ 21 июля 2010

Я делаю это, у меня есть параметр во вложенных отчетах, который пропускает строку вложенного отчета. Я надеюсь, что вы понимаете, если не дайте мне знать, и я опубликую исходный код.

  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>()));
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...