2010-02-11 1 views
-1

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

Доклад А является основным доклад, который имеет подотчет B имеет подотчет C ...

Отчета А заполняет источник данных 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

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

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>())); 
      } 
     } 
+1

Спасибо за сообщение! это было некоторое время назад, я опубликовал, и я уже реализовал для этого работу, было бы неплохо, если бы вы опубликовали исходный код для дальнейшего использования. – zeusmos

+0

@vinod Какое обходное решение вы реализовали? – Tommassiov