0

所以我为每个循环嵌套了这些,第二个循环采用第一个循环中计算的“访问”。但是,当它输出信息时,它会进行第一次访问,然后换页并继续循环,打印出第一次循环中出现的所有访问。如何让它在工作表 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

您可以做的一件事是添加更多“ChangeWorksheet”命令。另一种是再次重复整个访问循环。

方法 1 正是您已经实现的,我不得不假设由于某种原因不是您想要的。但是,我确实想知道为什么会这样……您会得到相同的结果。

它具体涉及打印一次访问,然后更改页面并打印该访问的详细信息,然后将页面更改回并移动到外部循环的第二次迭代。

方法 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++;
    }
}

具体来说,打印所有访问,更改页面,通过另一个打印所有详细信息的循环。只更改一次页面,但您必须经历两次访问循环。

关于编写代码要记住的一件事是,它总是按顺序执行,除非你告诉它不要这样做。这包括循环和其他东西。它将始终按照其写入的顺序执行。如果您希望在所有访问之后打印详细信息,则必须先告诉它打印所有访问,然后再告诉它打印任何详细信息。

于 2013-02-08T14:50:11.953 回答