0

したがって、これらをループごとにネストし、2番目のループは最初のループ内でカウントされる「訪問」を取得します。ただし、情報を出力するときは、最初の訪問を実行し、次にページを変更してループを続行し、最初のループからの訪問のすべての発生を出力します。シート1にすべての訪問を印刷してから、ネストされたループに移動してそれらの結果を印刷するにはどうすればよいですか?

int r = 1;
int j = 1;
int cell = 0;
//loop that places Visit on Sheet 1 of Excel
for (int i = 1; i < visits.Count(); i++)
  {
   Visit visit = visits[i];
   decimal? charges = visit.TotalCharges();
   decimal? payments = visit.TotalPayments();
   decimal? totAdj = visit.PaymentAdjustments.Where(x => x.nrv_cd.Trim() == "C01").Sum(s => s.pmt_pst_at);
   decimal? actbalance = charges - (payments + totAdj);
   CareGiver attending = visit.AttendingPhysicianCareGiver();

   workbook.AddCell(r, cell++, visit.Person.DisplayName());
   workbook.AddCell(r, cell++, visit.vst_ext_id.Trim());
   workbook.AddCell(r, cell++, visit.LosFormatted());
   workbook.AddCell(r, cell++, visit.CodeDetail.cod_dtl_ds);
   workbook.AddCell(r, cell++, visit.CodeDetail.cod_dtl_ext_id.Trim());
   workbook.AddCell(r, cell++, charges);
   workbook.AddCell(r, cell++, payments);
   workbook.AddCell(r, cell++, totAdj);
   workbook.AddCell(r, cell++, actbalance);
   r++;
   workbook.ChangeWorksheet(2);

      //when moving to this nested loop, it picks up all charge codes for that visit
      foreach (Charge c in visit.Charges)
       {
        workbook.AddCell(j, 0, visit.vst_ext_id.Trim());
        workbook.AddCell(j, 1, c.ChargeDefinition.chg_cod_ext_id.Trim());
        j++;
       }
      //when moving to this nested loop, it picks up all adjustment codes for that visit
      foreach (PaymentAdjustment pa in visit.PaymentAdjustments)
       {
        workbook.AddCell(j, 0, visit.vst_ext_id.Trim());
        workbook.AddCell(j, 1, pa.ChargeDefinition.chg_cod_ext_id.Trim());
        j++;
       }

        workbook.ChangeWorksheet(1);
4

1 に答える 1

0

できることの1つは、「ChangeWorksheet」コマンドを追加することです。もう1つは、訪問ループ全体をもう一度繰り返すことです。

方法1はまさにあなたが実装したものであり、私が推測しなければならないのは、何らかの理由であなたが望んでいたものではないということです。しかし、なぜそうなのか疑問に思います。同じ結果が得られます。

具体的には、1回の訪問を印刷し、次にページを変更してその訪問の詳細を印刷し、次にページを元に戻して外側のループの2番目の反復に移動する必要があります。

方法2は次のようになります。

for (int i = 1; i < visits.Count(); i++)
{

   Visit visit = visits[i];
   decimal? charges = visit.TotalCharges();
   decimal? payments = visit.TotalPayments();
   decimal? totAdj = visit.PaymentAdjustments.Where(x => x.nrv_cd.Trim() == "C01").Sum(s => s.pmt_pst_at);
   decimal? actbalance = charges - (payments + totAdj);
   CareGiver attending = visit.AttendingPhysicianCareGiver();

   workbook.AddCell(r, cell++, visit.Person.DisplayName());
   workbook.AddCell(r, cell++, visit.vst_ext_id.Trim());
   workbook.AddCell(r, cell++, visit.LosFormatted());
   workbook.AddCell(r, cell++, visit.CodeDetail.cod_dtl_ds); 
   workbook.AddCell(r, cell++, visit.CodeDetail.cod_dtl_ext_id.Trim());
   workbook.AddCell(r, cell++, charges);
   workbook.AddCell(r, cell++, payments);
   workbook.AddCell(r, cell++, totAdj);
   workbook.AddCell(r, cell++, actbalance);
   r++;
}

//new code
workbook.ChangeWorksheet(2);
for (int i = 1; i < visits.Count(); i++)
{
    Visit visit = visits[i];
    //when moving to this nested loop, it picks up all charge codes for that visit
    foreach (Charge c in visit.Charges)
    {
      workbook.AddCell(j, 0, visit.vst_ext_id.Trim());
      workbook.AddCell(j, 1, c.ChargeDefinition.chg_cod_ext_id.Trim());
      j++;
    }
    //when moving to this nested loop, it picks up all adjustment codes for that visit
    foreach (PaymentAdjustment pa in visit.PaymentAdjustments)
    {
      workbook.AddCell(j, 0, visit.vst_ext_id.Trim());
      workbook.AddCell(j, 1, pa.ChargeDefinition.chg_cod_ext_id.Trim());
      j++;
    }
}

具体的には、すべての訪問を印刷し、ページを変更し、すべての詳細を印刷する別のループを通過します。ページを変更するのは1回だけですが、訪問ループを2回実行する必要があります。

コードの記述について覚えておくべきことの1つは、指示しない限り、常に順番に実行されることです。これには、ループなどが含まれます。常に書き込まれた順序で実行されます。すべての訪問後に詳細を印刷する場合は、詳細を印刷するように指示する前に、すべての訪問を印刷するように指示する必要があります。

于 2013-02-08T14:50:11.953 に答える