2013-02-08 150 views
0

因此,我为每个循环嵌套这些循环,第二个循环将在第一个循环内计入“访问”。但是,当它输出信息时,它会进行首次访问,然后更改页面,并通过循环继续打印第一次循环中所有访问的出现。我如何让它打印表1中的所有访问,然后移动到嵌套循环并打印出这些结果?Foreach循环输出错误

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); 
+0

你想要什么时候嵌套的foreach循环迭代?这是只有你第一次循环后?或者是每次第一个循环读取一行时? – Hituptony 2013-02-08 13:48:44

+0

@Hituptony - 我想按以下顺序打印:表单1 - 访问1,访问2,访问3 ...表单2(嵌套循环进入)访问1:代码1,访问1:代码2,访问2:代码1,访问2:代码2,访问2:代码3 ...等等每次访问。第二张纸上的每次访问都会打印多个代码。 – Markpelly 2013-02-08 13:57:30

+0

你能评论你的代码在上面^^? – Hituptony 2013-02-08 14:00:29

回答

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

具体来说,打印所有的访问,更改网页,都要经过另一个循环,打印所有细节。只更换一次页面,但必须经过两次访问循环。

有一点要记住写代码,它总是按顺序执行,除非你不告诉它。这包括循环和其他事情。它将始终按其写入的顺序执行。如果您想要在全部访问之后打印详细信息,则必须告诉它打印所有访问,然后再告诉其打印的任何的详细信息。

+0

这是合理的,我认为有嵌套循环使它比它需要更复杂。谢谢。 – Markpelly 2013-02-08 14:58:37

+0

工作完美,谢谢。 – Markpelly 2013-02-08 15:07:13