{
// 在此處放置用戶代碼以初始化頁面
if(Request .QueryString ["GenerateIndex"]!=null && Request .QueryString ["GenerateIndex"].ToString ()!="")
{
GenerateIndex=Convert .ToInt32 (Request .QueryString ["GenerateIndex"]);
}
if(!this.Page .IsPostBack )
{
DataTable dt=cpm.PaperGenerateDetailQuery (GenerateIndex);
if(dt!=null && dt.Rows .Count >0)
{
this.DataGrid1 .DataSource =dt;
this.DataGrid1 .DataBind ();
}
}
}
{
Response.Clear();
Response.Buffer= true;
Response.Charset="GB2312";
Response.AppendHeader("Content-Disposition","attachment;filename=FileName.xls");
Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");//設置輸出流爲簡體中文
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);
this.DataGrid1.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();
}
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
e.Item.Cells[0].Attributes.Add("style","vnd.ms-excel.numberformat:@");//格式化爲EXCEL的文本
e.Item.Cells[1].Attributes.Add("style","vnd.ms-excel.numberformat:@");
}
}
注意:
1.若要使用此種方法,則datagrid不能做分頁操作,否則不能保存至EXCEL.
2.由於datagrid的數據量較大,共5萬條數據,生成的EXCEL文檔約爲6M。由於.net默認的request content 爲4096KB,約4M,因此將導致我此次的EXCEL生成失敗。解決辦法是,修改C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/CONFIG/machine.config文件,找到<httpRuntime
executionTimeout="9000"
maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="20"
minLocalRequestFreeThreads="20"
appRequestQueueLimit="100"
enableVersionHeader="true"
/>節,將maxRequestLength="4096"增大至409600.
至此,問題解決。