private void ExportExcelFromDataGrid
( string filename
System
Web
UI
WebControls
DataGrid ToExcelGrid )
{
Response
Clear();
Response
Buffer= true;
Response
Charset=
utf
;
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());
Response
End();
}
private void Button
_Click(object sender
System
EventArgs e)
{
this
Panel
Visible = false;
string filename =
內訓師
xls
;
this
DataGrid
Columns[
]
Visible = true;
this
DataGrid
Columns[
]
Visible = true;
this
DataGrid
Columns[this
DataGrid
Columns
Count
]
Visible = false; // *
this
DataGrid
Columns[this
DataGrid
Columns
Count
]
Visible = false; // *
this
DataGrid
AllowSorting = false; // *
this
DataGrid
AllowPaging = false;
this
DataGrid
SelectedIndex =
; // *
this
BindGrid();
this
ExportExcelFromDataGrid ( filename
this
DataGrid
);
}
}
原理是利用DataGrid(其實是其父類Control)的RenderControl方法輸出
整個DataGrid的外觀時
將這些HTML代碼寫入到緩沖區
同時設置一下 ContentType
讓Excel自己的自動糾錯功能將這個輸出存為一個Excel文件
很多網上的朋友使用了以上這種可粘貼性強的代碼
發現不好用
反映的錯誤類似
LinkButton必須放在一個具有runat=server的標簽的Form
之類的話
而更多的網友說
問題很明顯
因為DataGrid沒有放在runat=server 的Form裡面
加上就可以了
我認為
這種回答是很不准確的
理由如下
通常使用這種代碼的人他/她的DataGrid最起碼已經能用了所以必定放在那個具有runat=server 的form標簽裡了
報錯是LinkButton而不是DataGrid很多細心的朋友很可能會說我一直在用DataGridLinkButton在哪裡來的
其實真正的問題是
上面的代碼沒有加了 // * 的那幾行代碼引起的
當然如果你的DataGrid
沒有排序
沒有使用那種按鈕列的話
是不會出問題的
言歸正傳
LinkButtion其實是你將DataGrid設為可排序時候
的表頭包含的
所以我要將DataGrid的排序設為False
同樣得到上面的其實
那些按鈕列
什麼
編輯
刪除
等等這些
也是用了LinkButton
把他設為不可見就是了
其實說得再明白一點就是
將有可能產生LinkButton
或其他控件的東西都不讓它輸出就是了
From:http://tw.wingwit.com/Article/program/net/201311/12031.html