使用 ClosedXML 导出到 Excel 时,使用模板字段循环浏览网格视图行不起作用

本文关键字:循环 字段 浏览 网格 不起作用 视图 ClosedXML Excel 使用 | 更新日期: 2023-09-27 18:32:11

这是我在使用 ClosedXML 将网格视图导出到 Excel 时循环浏览网格视图行的代码:

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 行单元格值获取交货日期列的正确值?注意:交货日期列是模板字段。

使用 ClosedXML 导出到 Excel 时,使用模板字段循环浏览网格视图行不起作用

网格视图的行上有两个循环。因此,您可以多次覆盖每个单元格。对于前两个单元格,这是有效的,因为您在网格视图中和工作表中都引用了带有 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;
}