简体   繁体   English

如何使用C#将gridview导出到ASP.net中的Excel?

[英]How to export gridview to Excel in ASP.net using C#?

Does someone know how I can export a gridview in ASP.net to Excel?? 有人知道如何将ASP.net中的gridview导出到Excel吗?

I use this code but I can't access my gridview because it's null 我使用此代码,但由于它为null而无法访问我的gridview

protected void BtnExport_Click(object sender, EventArgs e)
{
    DataTable dtOriginal = new DataTable();
    dtOriginal = (DataTable)gvRapporten.DataSource; //Return Table consisting data

    //Create Tempory Table
    DataTable dtTemp = new DataTable();

    //Creating Header Row
    dtTemp.Columns.Add("<b>Melder</b>");
    dtTemp.Columns.Add("<b>Onderwerp</b>");
    dtTemp.Columns.Add("<b>Oplosser</b>");
    dtTemp.Columns.Add("<b>Niveau 2</b>");
    DataRow drAddItem;
    for (int i = 0; i < dtOriginal.Rows.Count; i++)
    {
        drAddItem = dtTemp.NewRow();
        drAddItem[0] = dtOriginal.Rows[i][0].ToString();//Melder
        drAddItem[1] = dtOriginal.Rows[i][1].ToString();//Onderwerp
        drAddItem[2] = dtOriginal.Rows[i][2].ToString();//Oplosser
        drAddItem[3] = dtOriginal.Rows[i][3].ToString();//Niveau 2

        dtTemp.Rows.Add(drAddItem);
    }

    //Temp Grid
    DataGrid dg = new DataGrid();
    dg.DataSource = dtTemp;
    dg.DataBind();
    ExportToExcel("Report.xls", dg);
    dg = null;
    dg.Dispose();
}

private void ExportToExcel(string strFileName, DataGrid dg)
{
    Response.ClearContent();
    Response.AddHeader("content-disposition", "attachment; filename=" + strFileName);
    Response.ContentType = "application/excel";
    System.IO.StringWriter sw = new System.IO.StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(sw);
    dg.RenderControl(htw);
    Response.Write(sw.ToString());
    Response.End();
}

can you try this ? 你可以试试吗?

System.IO.StringWriter sw = new System.IO.StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
Response.AddHeader("content-disposition", "attachment; filename=" + strFileName);
Response.ClearContent();

Response.AddHeader("content-disposition", attachment);

dg.RenderControl(htw);
Response.Write(sw.ToString());
Response.Flush();
Response.End();

You code simply generates a Html-Table(that is what ASP.Net renders a GridView/DataGrid to) and nothing else. 您只需编写代码即可生成一个Html-Table(这是ASP.Net将GridView / DataGrid呈现给它的内容),而仅此而已。 Excel can handle this and display it like a Table but it is not really a xls - or csv -file. Excel可以处理该问题并像表一样显示它,但它实际上不是xlscsv文件。

The DataSource-property of a GridView is always null/nothing after postback. 回发后,GridView的DataSource属性始终为null /无。 You should generate the DataSource again before you export it to excel. 在将数据源导出到excel之前,应该再次生成它。

This code converts any datatable to a csv-String: 此代码将任何数据表转换为csv-String:

C# C#

public static string tableToCsv(DataTable DT)
{
    System.Text.StringBuilder csv = new System.Text.StringBuilder();
    System.Text.StringBuilder rowData = new System.Text.StringBuilder();
    DataRow DR = null;
    DataColumn DC = null;

    foreach (DataColumn DC_loopVariable in DT.Columns) {
        DC = DC_loopVariable;
        rowData.Length = 0;
        rowData.Append((rowData.Length > 0 ? ";" : "").ToString());
        rowData.Append(DC.ColumnName);
    }
    csv.Append(rowData.ToString()).Append(Strings.Chr(13));

    foreach (DataRow DR_loopVariable in DT.Rows) {
        DR = DR_loopVariable;
        rowData.Length = 0;

        foreach (DataColumn DC_loopVariable in DT.Columns) {
            DC = DC_loopVariable;
            rowData.Append((rowData.Length > 0 ? ";" : "").ToString());
            rowData.Append(DR[DC.ColumnName].ToString());
        }
        csv.Append(rowData.ToString()).Append(Strings.Chr(13));
    }
    return csv.ToString();
}

VB VB

Public Shared Function tableToCsv(ByVal DT As DataTable) As String
    Dim csv As New System.Text.StringBuilder
    Dim rowData As New System.Text.StringBuilder
    Dim DR As DataRow
    Dim DC As DataColumn

    For Each DC In DT.Columns
        rowData.Length = 0
        rowData.Append(IIf(rowData.Length > 0, ";", "").ToString)
        rowData.Append(DC.ColumnName)
    Next
    csv.Append(rowData.ToString).Append(Chr(13))

    For Each DR In DT.Rows
        rowData.Length = 0

        For Each DC In DT.Columns
            rowData.Append(IIf(rowData.Length > 0, ";", "").ToString)
            rowData.Append(DR.Item(DC.ColumnName).ToString)
        Next
        csv.Append(rowData.ToString).Append(Chr(13))
    Next
    Return csv.ToString
End Function
Dim dt As DataTable = ViewState("FinalState")
Dim GV As New GridView
GV.DataSource = dt ' UpdateDataTable(ViewState("FinalTable"))
GV.DataBind()
Response.Clear()
Response.Buffer = True
Response.AddHeader("content-disposition", "attachment;filename=ProspectsBank.xls")
Response.Charset = ""
Response.ContentType = "application/vnd.ms-excel"
Dim sw As New StringWriter()
Dim hw As New HtmlTextWriter(sw)
For i As Integer = 0 To GV.Rows.Count - 1
    'Apply text style to each Row 
    GV.Rows(i).Attributes.Add("class", "textmode")
Next
GV.RenderControl(hw)
Dim style As String = "<style> .textmode { mso-number-format:\@; } </style>"
Response.Write(style)
Response.Output.Write(sw.ToString())
clsLog.SaveLogValue(Request.ServerVariables("REMOTE_ADDR"), "SearchAudienceForMagazine.aspx", "User Export Data From Our Databank in EXCEL format. Current they Exported " & dt.Rows.Count & " Data.", Session("User_TypeId"), Session("User_Name"))
Response.Flush()
Response.End()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 嵌套的GridView导出到Excel,asp.net C# - nested gridview export to excel, asp.net c# 如何在Excel表格单元格中的ASP.NET C#MVC 5中以编程方式创建超链接,同时使用gridview导出到excel - how to create hyperlink programmatically in asp.net c# mvc 5 in excel sheet cell while export to excel using gridview 使用GridView启用分页,将所有数据导出到Excel。 - Export all data to Excel using GridView with paging enabled..in asp.net with c# 如何在C#ASP.NET Web窗体中将搜索结果从Gridview导出到Excel - How to export search results from Gridview to Excel in c# ASP.NET Web Forms 使用 c# 将 500 万条记录导出到 asp.net 中的 excel? - Export 5 million records to excel in asp.net using c#? 从GridView asp.net C#导出到Excel - 服务器组件 - Export to Excel From GridView asp.net C# - Server Component 在ASP.NET C#中将信息追加到GridView Export上的Excel文件中 - Append information to Excel file on GridView Export in ASP.NET C# 在Asp.net C#中仅将Gridview数据导出为Excel格式 - Export only Gridview Data to Excel format in Asp.net C# 如何在asp.net中使用C#将使用jquery flot动态生成的图表导出到Excel中? - How to export charts which are dynamically generated by using jquery flot into Excel using C# in asp.net? 使用C#的ASP.NET GridView - ASP.NET GridView using C#
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM