将sqldatasource导出为ex​​cel不仅仅是list或gridview

时间:2013-05-23 20:03:39

标签: asp.net excel sqldatasource

我试图导出我的listview,但不仅仅是可见的listview,我想导出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方法。有一个干净的方式来解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

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

示例:

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

现在拿这个DataTable并导出它。 Google export DataTable to Excel.

如果您使用第三方库,请查看EPPLUS。您可以将DataTable导出到Excel中,实际上是2行代码。其余的将是设置标题和刷新响应的代码。

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

答案 1 :(得分:0)

我更喜欢使用CSV而不是excel来处理普通数据,但新版本的Excel确实具有压缩的优势。

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