C# 使用ClosedXML导出到Excel时,使用TemplateField在gridview行中循环无效

C# 使用ClosedXML导出到Excel时,使用TemplateField在gridview行中循环无效,c#,asp.net,closedxml,C#,Asp.net,Closedxml,这是我在使用ClosedXML将gridview导出到Excel时循环gridview行的代码: 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).V

这是我在使用ClosedXML将gridview导出到Excel时循环gridview行的代码:

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;
   }
}
问题是我的所有交货日期列的值都捕获了gridview的最后一行值。如何根据gridview行单元格值获取交货日期列的正确值?
注意:交货日期列是模板字段。

在网格视图的行上有两个循环。因此,您可以多次覆盖每个单元格。对于前两个单元格,这是有效的,因为您使用
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;
}
for(int i=0;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;
}