[英]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可以处理该问题并像表一样显示它,但它实际上不是
xls
或csv
文件。
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.