我使用以下代码将GridView
导出到Excel
:
string attachment = "attachment; filename=Contacts.xls";
Response.ClearContent();
Response.AddHeader("content-disposition", attachment);
Response.ContentType = "application/ms-excel";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
gvReports.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
此代码是从this网站复制的。我已按照所有说明进行操作,但执行后没有任何反应。没有例外(我认为,除了Thread.Abort
,因为Response.End()
)。
我也使用过Response.Flush()
但没有任何事情发生,没有异常或文件等。
感谢。
编辑现在代码如下:
我的GridView处于控制状态。控件在asp.net页面上,该页面有以下方法。
public override void VerifyRenderingInServerForm(Control control)
{
}
点击ascx控件中的按钮事件:
protected void btnExportToExcel_Click(object sender, EventArgs e)
{
ExportToExcel();
}
private void ExportToExcel()
{
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition",
"attachment;filename=GridViewExport.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel ";
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
gvReports.AllowPaging = false;
gvReports.DataBind();
gvReports.RenderControl(hw);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
}
gvReports没有链接,复选框等5个绑定列和1个按钮。
什么都没发生。
答案 0 :(得分:0)
UserControl代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
public partial class WebUserControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
this.gridView.DataSource = this.SqlDataSource1;
this.gridView.DataBind();
}
private void excel_Export()
{
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition",
"attachment;filename=GridViewExport.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel ";
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
this.gridView.AllowPaging=false;
this.gridView.DataBind();
this.gridView.RenderControl(hw);
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();
}
protected void Button1_Click(object sender, EventArgs e)
{
excel_Export();
}
}
用户控制托管页面:
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<uc1:WebUserControl ID="WebUserControl1" runat="server" />
</asp:Content>
你真的不需要在用户控件托管页面的代码后面跟踪事件,因为excel导出是通过包含网格视图和按钮的用户控件完成的。
public override void VerifyRenderingInServerForm(Control control)
{
/* Verifies that the control is rendered */
}
希望您能帮助解决问题。
答案 1 :(得分:0)
itextsharp dll,你会得到最好的方法来做到这一点
答案 2 :(得分:0)
我正在使用MVC3作为我的解决方案,但我用来将数据推送到excel文件的代码是:
var grid = new GridView
{
DataSource = from lineItem in rows
select new
{
lineItem.ProjectName,
lineItem.Sat,
lineItem.Sun,
lineItem.Mon,
lineItem.Tue,
lineItem.Wed,
lineItem.Thu,
lineItem.Fri
}
};
var fileName = string.Format("{0}:{1}", userName, timesheetDate);
grid.DataBind();
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=" + fileName + ".xls");
Response.ContentType = "application/msexcel";
var sw = new StringWriter();
var htw = new HtmlTextWriter(sw);
grid.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
我看到的直接差异是:
I take my data and create a new GridView
Response.ClearContent() instead of a Response.Clear()
Response.Write instead of Response.Output.Write
其他所有内容都相同,我们都使用click事件来调用void函数。所以我猜你如果做了那些改动,你的代码就应该开始为你工作了。
自从我实施此解决方案已经有一段时间了,我找不到我得到的网站,所以我无法向您展示我的原始资源。对于那个很抱歉。