使用gridview中的自动生成列拉取列数和标题文本

时间:2014-10-29 17:31:33

标签: c# asp.net excel gridview

我正在重写我团队主库中的一个功能,其中一个功能是将Gridview导出到Excel电子表格。我已经有一个将DataSet导出到Excel的函数,所以我需要做的就是将gridview转换为DataSet。没问题吧?一切顺利,直到我发现GridView对象的列collect为空,并且在使用自动生成的列时标题文本为null。

我知道MS已经说过你放弃了gridview渲染数据的方式,但我找不到任何能说明我如何捕获列集合的东西。我希望这个图书馆尽可能灵活。

这是我现在的功能......

public static MemoryStream GridViewToXLSX(GridView Gridview, Options options = null)
    {
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();


        for (int i = 0; i < Gridview.Columns.Count; i++)
        {
            dt.Columns.Add(Gridview.Columns[i].HeaderText);
        }
        foreach (GridViewRow row in Gridview.Rows)
        {
            DataRow dr = dt.NewRow();
            for (int j = 0; j < Gridview.Columns.Count; j++)
            {
                dr[Gridview.Columns[j].HeaderText] = row.Cells[j].Text;
            }

            dt.Rows.Add(dr);
        }

        ds.Tables.Add(dt);

        return DataSetToXLSX(ds, options);
    }

1 个答案:

答案 0 :(得分:2)

  

或者你可以尝试这个示例代码,而不是Column.count,你可以计算GridView的HeaderRow中的单元格数。

这只是一个示例,而非实际代码

GridViewRow headerRow = gv.HeaderRow; 
int count = headerRow.Cells.Count