我试图导出我的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方法。有一个干净的方式来解决这个问题吗?
答案 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。