Цикл по строкам сетки с помощью TemplateField при экспорте в Excel с использованием ClosedXML не работает

Это мой код для циклического просмотра строк сетки при экспорте сетки в Excel с использованием ClosedXML:

for (int i = 0; i < gvPOlist.Rows.Count; i++)
{
  foreach (GridViewRow gvr in gvPOlist.Rows)
  {
    worksheet.Cell(i + 23, 3).Value = gvPOlist.Rows[i].Cells[1].Text;
    worksheet.Cell(i + 23, 4).Value = gvPOlist.Rows[i].Cells[2].Text;
    worksheet.Cell(i + 23, 8).Value = ((TextBox)gvr.FindControl("txtReqDelDate")).Text;
   }
}

Мой вывод

  Item Code       Description         Delivery Date
  code001         Item One            01/28/2016
  code004         Item Four           01/28/2016    

Проблема заключается в том, что значение всего моего столбца даты доставки зафиксировало значение последней строки gridview. Как я могу получить правильное значение столбца даты доставки на основе значения ячейки строки gridview? Примечание. Столбец «Дата доставки» является полем шаблона.


person odlan yer    schedule 28.01.2016    source источник


Ответы (1)


У вас есть две петли над строками вашего представления сетки. Таким образом, вы перезаписываете каждую ячейку несколько раз. Для первых двух ячеек это работает, потому что вы ссылаетесь как на ячейку в представлении сетки, так и на листе с помощью i. Для третьей ячейки вы записываете ячейку представления сетки из каждой строки в одну и ту же ячейку рабочего листа, поэтому выживает только последняя строка.

Чтобы решить эту проблему, удалите один из циклов, например:

for (int i = 0; i < gvPOlist.Rows.Count; i++)
{
    worksheet.Cell(i + 23, 3).Value = gvPOlist.Rows[i].Cells[1].Text;
    worksheet.Cell(i + 23, 4).Value = gvPOlist.Rows[i].Cells[2].Text;
    worksheet.Cell(i + 23, 8).Value = ((TextBox)gvPOlist.Rows[i].FindControl("txtReqDelDate")).Text;
}
person Raidri    schedule 28.01.2016