-1

レポート A、レポート B、レポート C、レポート D の 4 つのレポートがあり、データソースはそれぞれ dsA、dsB、dsC、および dsD です。

レポート A はメイン レポートであり、サブレポート B にはサブレポート C があります ...

Report A は、SubreportProcessingEvent のデータソース dsB に 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 レベルを理解できませんでした。提案や例をいただければ幸いです。

ありがとう

4

1 に答える 1

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>()));
            }
        }
于 2010-07-20T21:05:36.067 に答える