1

我正在使用以下代码将我的导出GridViewExcel

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();

此代码是从该站点复制的。我已按照所有说明进行操作,但执行后什么也没发生。没有例外(除了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 个按钮。

什么都没有发生。

4

3 回答 3

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

其他一切看起来都一样,我们都使用点击事件来调用 void 函数。所以我猜,如果你做了这些改动,你的代码应该开始为你工作了。

自从我实施这个解决方案已经有一段时间了,我找不到我得到这个解决方案的网站,所以我无法向你展示我的原始来源。对于那个很抱歉。

于 2012-10-15T17:06:04.290 回答
0

用户控制代码:

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 */
 }

希望这将帮助您解决问题。

于 2012-10-15T15:48:31.147 回答
0

itextsharp dll,你会得到最好的方法来做到这一点

点击这里

于 2012-10-15T16:09:03.690 回答