将GridView数据放在DataTable中

Bla*_*Woo 13 c# asp.net datatable gridview

我正试图将a保存GridViewDataTable.

我有代码,理论上应该这样做但我不断收到此错误:

第0列不存在

这是我的代码:

protected void Button1_Click(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        for (int j = 0; j < GridView1.Rows.Count; j++)
        {
            DataRow dr;
            GridViewRow row = GridView1.Rows[j];
            dr = dt.NewRow();
            for (int i = 0; i < row.Cells.Count; i++)
            {
                dr[i] = row.Cells[i].Text;
            }

            dt.Rows.Add(dr);
        }
    }
Run Code Online (Sandbox Code Playgroud)

有关如何解决此问题的任何帮助?

Ade*_*mar 15

你可以这样做:

DataTable dt = new DataTable();
for (int i = 0; i < GridView1.Columns.Count; i++)
    {
        dt.Columns.Add("column"+i.ToString());
    }
foreach (GridViewRow row in GridView1.Rows)
    {
        DataRow dr = dt.NewRow();
        for(int j = 0;j<GridView1.Columns.Count;j++)
            {
                dr["column" + j.ToString()] = row.Cells[j].Text;
            }

            dt.Rows.Add(dr);
    }
Run Code Online (Sandbox Code Playgroud)

这将表明它有效.

GridView6.DataSource = dt;
GridView6.DataBind();
Run Code Online (Sandbox Code Playgroud)

  • 这将创建一个新的数据表,但不使用当前的列标题名称 (2认同)

小智 5

protected void btnExportExcel_Click(object sender, EventArgs e)
{
    DataTable _datatable = new DataTable();
    for (int i = 0; i < grdReport.Columns.Count; i++)
    {
        _datatable.Columns.Add(grdReport.Columns[i].ToString());
    }
    foreach (GridViewRow row in grdReport.Rows)
    {
        DataRow dr = _datatable.NewRow();
        for (int j = 0; j < grdReport.Columns.Count; j++)
        {
            if (!row.Cells[j].Text.Equals("&nbsp;"))
                dr[grdReport.Columns[j].ToString()] = row.Cells[j].Text;
        }

        _datatable.Rows.Add(dr);
    }
    ExportDataTableToExcel(_datatable);
}
Run Code Online (Sandbox Code Playgroud)