【问题标题】:Looping through gridview rows with a TemplateField when exporting to Excel using ClosedXML is not working使用 ClosedXML 导出到 Excel 时使用 TemplateField 循环遍历 gridview 行不起作用
【发布时间】:2016-01-28 08:22:37
【问题描述】:

这是我在使用 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;
   }
}

我的输出是

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

问题是我所有的交货日期列的值都捕获了gridview的最后一行值。如何根据其 gridview 行单元格值获取交货日期列的正确值? 注意:交货日期列是模板字段。

【问题讨论】:

    标签: c# asp.net closedxml


    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-22
      • 2017-02-03
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多