c# 中的索引超出范围错误,"Cannot find column 0"

index out of range error in c#, "Cannot find column 0"

这是我的代码片段。

XLWorkbook wb = new XLWorkbook();
GridView[] gvExcel = new GridView[] { gv01PL, gv01PD, gv01T1, gv023P, gv023L, gv02SU };
string[] name = new string[] { "01-PL", "01-PD", "01-T1", "02-3P", "02-3L", "02-SU" };
for (int i = 0; i < gvExcel.Length; i++)//each gridview
{
    if (gvExcel[i].Visible)
    {
        gvExcel[i].AllowPaging = false;
        DataTable dt = new DataTable(name[i].ToString());
        for (int z = 0; z < gvExcel[i].Columns.Count; z++)
        {
            dt.Columns.Add(gvExcel[i].Columns[z].HeaderText);
        }
        foreach (GridViewRow row in gvExcel[i].Rows)
        {
            dt.Rows.Add();
            for (int c = 0; c < row.Cells.Count; c++)
            {
                dt.Rows[dt.Rows.Count - 1][c] = row.Cells[c].Text;
            }
        }
        wb.Worksheets.Add(dt);
        gvExcel[i].AllowPaging = true;
    }
}

我在使用这条线时遇到了问题:

dt.Rows[dt.Rows.Count - 1][c] = row.Cells[c].Text;

它给出了“找不到第 0 列”的错误。我知道我在这里遗漏了一些简单的东西。任何帮助将不胜感激。

改为克隆你的行...

var desRow = dt.NewRow();
var sourceRow = dt.Rows[dt.Rows.Count - 1];
desRow.ItemArray = sourceRow.ItemArray.Clone() as object[];

dt.Rows.Add(desRow);

您可能会收到此错误,因为 DataTable 没有任何列。

确保这里的 gvExcel[i].Columns.Count 不是 0:

   for (int z = 0; z < gvExcel[i].Columns.Count; z++)
   {
       dt.Columns.Add(gvExcel[i].Columns[z].HeaderText);
   }