1

次のコードを使用してにエクスポートしてい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();

このコードはこのサイトからコピーされます。すべての指示に従いましたが、実行しても何も起こりませんでした。例外Thread.Abortはありません(私が思うに、 のせいですResponse.End())。

私も使用しResponse.Flush()ましたが、例外やファイルなどは何も発生していません。

ありがとう。

EDIT Now コードは次のようになります。

私の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 dlls を使用すると、それを行うための最良の方法が得られます

ここをクリック

于 2012-10-15T16:09:03.690 に答える