2011-04-06 118 views
0

有人知道我怎樣才能將ASP.net中的gridview導出到Excel?如何使用C#將asp.net中的gridview導出到Excel中?

我用這個代碼,但因爲它是空我無法訪問我的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(); 
} 

回答

2

你可以試試這個?

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

你代碼只生成HTML的表(這就是ASP.Net呈現一個GridView/DataGrid中來)並沒有什麼其他。 Excel可以處理這個並且像表格一樣顯示它,但它不是真的xlscsv-文件。

回發後,GridView的DataSource屬性始終爲空/無。在將其導出到Excel之前,您應該再次生成DataSource。

此代碼轉換的任何DataTable到CSV字符串:

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

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 
-1
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() 
+1

C#請看看中使用的標籤。 – SamekaTV 2012-02-23 10:47:46

+0

但是它可能對VB程序員有用,如果它工作的話...... – SamekaTV 2012-02-24 13:45:43

相關問題