使用 ClosedXML 导出到 Excel 时,使用 TemplateField 循环遍历 gridview 行不起作用
Looping through gridview rows with a TemplateField when exporting to Excel using ClosedXML is not working
这是我在使用 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 行单元格值获取交货日期列的正确值?
注:交货日期列为模板字段。
您在网格视图的行上有两个循环。所以你多次覆盖每个单元格。对于前两个单元格,这是可行的,因为您在网格视图和工作表中都使用 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;
}
这是我在使用 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 行单元格值获取交货日期列的正确值? 注:交货日期列为模板字段。
您在网格视图的行上有两个循环。所以你多次覆盖每个单元格。对于前两个单元格,这是可行的,因为您在网格视图和工作表中都使用 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;
}