0

我正在尝试导出我的列表视图,但不仅仅是可见的列表视图,我想导出 sqldatasource 的全部内容。该查询返回 20 列,列表视图上仅显示一小部分 (5)。有没有办法可以将整个 20 列导出到 excel 文件?

到目前为止我有这个:

protected void ExportToExcel(object sender, EventArgs e)
{
    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = "application/vnd.ms-excel";
    Response.AddHeader("content-disposition", "attachment;filename=SearchResults.xls");
    Response.Charset = "";
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    this.EnableViewState = false;
    StringWriter stringWriter = new StringWriter();
    HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);

    //I want to chagne this:
    this.ResultsListView.RenderControl(htmlTextWriter);

    Response.Write(stringWriter.ToString());
    Response.End();
 }

而不是这一行:

    this.ResultsListView.RenderControl(htmlTextWriter);

我想做类似的事情:

    this.sqldatasource.RenderControl(htmlTextWriter);

但显然 SqlDataSource 没有 RenderControl 方法。有没有一种干净的方法来解决这个问题?

4

2 回答 2

2

您可以从 SqlDataSource 返回的 DataView 创建一个 DataTable 并将其导出到 Excel。生成的 DataTable 将包含所有列。

例子:

DataTable dt = ((DataView) this.sqldatasource.Select(DataSourceSelectArguments.Empty)).ToTable();

现在获取此 DataTable 并将其导出。谷歌将数据表导出到 Excel。

如果您可以使用第三方库,请查看EPPLUS。您可以在字面上用 2 行代码将 DataTable 导出到 Excel。剩下的就是设置标头和刷新响应的代码。

这是一个示例:http ://epplus.codeplex.com/wikipage?title=WebapplicationExample

于 2013-05-23T20:55:21.790 回答
0

对于纯数据,我更喜欢使用 CSV 而不是 excel,但是新版本的 Excel 确实具有压缩的优势。

您可以使用OpenXMLSDK直接导出到 XLSX 或使用FileHelpers库导出到 CSV。

于 2013-05-23T21:08:39.353 回答