私有無效 ExportExcelFromDataGrid( 字串 檔案名稱 , System.Web.UI.WebControls.DataGrid ToExcelGrid )
{
Response.Clear();
響應.Buffer= true;
Response.Charset="utf-8";
Response.AppendHeader("Content-Disposition","attachment;filename="+Server.UrlEncode ( filename ) );
Response.ContentEncoding=System.Text.Encoding.Default;//設定輸出流為簡體中文
Response.ContentType = "application/ms-excel";//設定輸出檔案類型為excel檔案。
this.EnableViewState = false;
System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN",true);
System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad);
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
ToExcelGrid.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
響應.End();
}
private void Button4_Click(物件發送者, System.EventArgs e)
{
this.Panel1.Visible = false;
string filename = "內訓者.xls";
this.DataGrid1.Columns[6].Visible = true;
this.DataGrid1.Columns[7].Visible = true;
this.DataGrid1.Columns[this.DataGrid1.Columns.Count-1].Visible = false;
this.DataGrid1.Columns[this.DataGrid1.Columns.Count-2].Visible = false;
this.DataGrid1.AllowSorting = false;
this.DataGrid1.AllowPaging = false;
this.DataGrid1.SelectedIndex = -1;
this.BindGrid();
this.ExportExcelFromDataGrid ( 檔名 , this.DataGrid1 );
}
原理是利用DataGrid(其實是其父類別Control)的RenderControl方法輸出,整個DataGrid的外觀時,將這些HTML程式碼寫入狀態圖,同時設定一下ContentType,讓Excel自己的自動糾錯功能將這個輸出
存為一個
Excel檔案。
「LinkButton必須放在一個帶有runat=server標籤的Form」之類的話,而更多的網友說:
沒有
放在runat=server
的Form裡面,加上就可以了。
最開始的程式碼已經能用了,所以一定要把那個有runat=server 的表單標籤裡了。
報錯的是LinkButton,而不是DataGrid,很多細心的朋友很可能會說,我一直在用DataGrid,LinkButton在哪裡來的。
其實真正的問題是,上面的程式碼沒有加了 // * 的那幾行所引起的程式碼。
當然如果你的DataGrid,沒有排序,沒有使用那樣的按鈕列的話,是不會出問題的。
言歸正傳,LinkButtion其實是你將DataGrid設為可排序的時候,的表頭包含的,所以我把DataGrid的排序設為False。
得到上面的等等其實,那些按鈕列,什麼「編輯」、「刪除」這些,也用了同樣的LinkButton,把按鈕設為不可見就是了。
本質上說得再明白一點就是,將有可能產生LinkButton,或者其他控件的東西都不製作輸出就是了
http://www.cnblogs.com/killkill/archive/2006/09/21/510289 .html