【问题标题】:export to excel from gridview asp.net从 gridview asp.net 导出到 excel
【发布时间】:2015-12-19 08:38:31
【问题描述】:

我阅读了很多关于 stackoverflowcode project 的文章,我也在我的代码和页面中实现了这一点。但我无法将gridview 数据导出到excel。我正在将我的gridview 与页面上的object datasource 绑定。但是没有成功导出到excel。你能告诉我我在做什么错误吗?我在下面给出的所有代码流。

<%@ Page Language="C#" Theme="Default" MasterPageFile="~/Order/Order.master" AutoEventWireup="true" CodeFile="ActiveOrders.aspx.cs" Inherits="ActiveOrders" Title="SimplyDispatch-ActiveOrders List" EnableEventValidation="false" %>  



<data:EntityGridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"
 DataSourceID="ActiveOrdersDataSource" Width="100%" DataKeyNames="OrderNo" AllowMultiColumnSorting="false"                                         DefaultSortColumnName="OrderNo" OnRowCommand="GridView1_RowCommond" OnRowDataBound="GridView1_OnRowDataBound"                                          AllowSorting="true" DefaultSortDirection="Descending"                                         PageSize="50"  EnableViewState="true" >
    <Columns>
     <asp:BoundField DataField="OrderNo" HeaderStyle-HorizontalAlign="Right" ItemStyle-HorizontalAlign="Right"                                            HeaderText="Order No" SortExpression="[OrderNo]" />
      <asp:BoundField DataField="OrderDate" HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center"                                               DataFormatString="{0:d}" HtmlEncode="False" HeaderText="Order Date" SortExpression="[OrderDate]" />
    </Columns>                 

     <EmptyDataTemplate>

   </EmptyDataTemplate>

    </data:EntityGridView>

网格视图数据源

 <data:ActiveOrdersDataSource ID="ActiveOrdersDataSource" runat="server" SelectMethod="GetPaged" EnablePaging="True" EnableSorting="True" EnableDeepLoad="True">
</data:ActiveOrdersDataSource>

我要导出到 excel 的代码如下

 protected void ExportToExcel(object sender, EventArgs e)
    {
        try
        {
 Response.Clear();
            Response.ClearHeaders();
            Response.Buffer = true;
            Response.AddHeader("content-disposition", "attachment;filename=" + "Excelsheet_" + DateTime.Now.Ticks.ToString() + ".xls");
            Response.Charset = "";
            Response.ContentType = "application/vnd.xls";
            StringWriter StringWriter = new System.IO.StringWriter();
            HtmlTextWriter HtmlTextWriter = new HtmlTextWriter(StringWriter);
            GridView1.AllowSorting = false;
            GridView1.RenderControl(HtmlTextWriter);// render gridview control
            Response.Write(StringWriter.ToString());
            Response.End();
        }
        catch (Exception ex)
        {

        }
    }

public override void VerifyRenderingInServerForm(Control control)
    {
        /* Confirms that an HtmlForm control is rendered for the specified ASP.NET
           server control at run time. */
    }

【问题讨论】:

  • 什么不起作用?你有什么例外吗?
  • @VIVEK 没有收到任何错误但没有创建 excel 文件。代码执行成功。

标签: c# asp.net excel gridview export


【解决方案1】:

使 EnableEventValidation=True,然后重试。或使用 closedXML,这是导出到 excel 的最简单方法之一,也是高效的。 https://closedxml.codeplex.com/

将数据表保存在会话中并将数据表传递给以下方法,以执行导出功能。

 public  void ExportToExcel(DataTable dt)
{

    XLWorkbook wb = new XLWorkbook();
    //Specify sheet name
    var ws = wb.Worksheets.Add(dt, "SHEET NAME");

    ws.Columns().AdjustToContents();
    ws.Style.Fill.BackgroundColor = XLColor.Transparent;

    var excelTable = ws.Tables.First();

    excelTable.ShowAutoFilter = false;
    excelTable.ShowRowStripes = false;
    excelTable.Theme = XLTableTheme.None;
    excelTable.Style.Border.TopBorder = XLBorderStyleValues.Thin;
    excelTable.Style.Border.BottomBorder = XLBorderStyleValues.Thin;
    excelTable.Style.Border.RightBorder = XLBorderStyleValues.Thin;
    excelTable.Style.Border.LeftBorder = XLBorderStyleValues.Thin;

    var headerRow = ws.Tables.First().FirstRow();

    headerRow.Style.Fill.BackgroundColor = XLColor.Transparent;
    headerRow.Style.Font.Bold = true;
//specify filename
    string fileName = "File Name"  + ".xlsx";

    HttpResponse httpResponse = Response;
    httpResponse.Clear();
    httpResponse.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
    httpResponse.AddHeader("content-disposition", "attachment;filename=\"" + fileName + "\"");

    // Flush the workbook to the Response.OutputStream
    using (MemoryStream memoryStream = new MemoryStream())
    {
        wb.SaveAs(memoryStream);
        memoryStream.WriteTo(httpResponse.OutputStream);
        memoryStream.Close();
    }

    httpResponse.End();
}

【讨论】:

  • 但是我如何从这个 dll 中的 gridview 导出
  • 也包含这个命名空间using ClosedXML.Excel;
  • 如果有帮助就标记为答案
【解决方案2】:

试试这个代码

protected void ExportToExcel(object sender, EventArgs e)
    {
      try
      {
        Response.ClearContent();
        Response.ClearHeaders();
        Response.AddHeader("contentdisposition","attachment;filename=Demo.xls");
        Response.ContentType = "application/ms-excel";
        Response.ContentEncoding = System.Text.Encoding.Unicode;
        Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());
        System.IO.StringWriter sw = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter hw = new HtmlTextWriter(sw);
        Label lblheader = new Label();
        lblheader.Font.Size = 14;
        lblheader.Font.Bold = true;
        lblheader.Text = "Demo Detail";
        lblheader.RenderControl(hw);


        GrdExcel.RenderControl(hw);
        Response.Write(sw.ToString());
        Response.Flush();
        Response.End();
        GrdExcel.Visible = false;
    }
    catch (Exception ex)
    {

    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 2016-11-30
    • 1970-01-01
    相关资源
    最近更新 更多