日期:2014-05-19  浏览次数:20428 次

DataGrid 另存成 Excel的问题
我之前在坛子里找了一个Datagrid另存成Excel的方法,但是遇到一点问题,就是当我的Datagrid的数据行数达到3000来行的时候就会失效,网页报错,报错类型是很简单的那种HTML错误,不知道是设置的问题还是什么问题。
请问问各位有什么高见或者有什么更好的方法解决这个另存的问题?

代码如下:
Response.Charset= "GB2312 ";
Response.AppendHeader( "Content-Disposition ", "attachment;filename= "+fname+ ".xls ");

Response.ContentEncoding=System.Text.Encoding.UTF8;
Response.ContentType= "application/ms-excel ";
ctl.Page.EnableViewState=false;
System.IO.StringWriter   tw=new   System.IO.StringWriter();
System.Web.UI.HtmlTextWriter   hw=new   HtmlTextWriter(tw);
ctl.RenderControl(hw);
Response.Write( " <form     runat=server> "+tw.ToString()+ " </form> ");
Response.End();

------解决方案--------------------
ctl.Page.EnableViewState=false;不用

你如果Datagrid分页了的话 要显示所有数据还要先取消分页
this.DataGrid1.AllowPaging = false;
再 BD();
再打印
------解决方案--------------------
up
------解决方案--------------------
如果你真的只是想存一个excel出来而已,其实有个非常简单的方法,只是不会太正规,单效果却非常好:
DataSet ds=cfg.GetDs(sql);
DataTable dt=ds.Tables[0];
StringWriter sw=new StringWriter();
string t = ds.Tables[0].Columns[0].ColumnName.ToString();
for(int i=1;i <ds.Tables[0].Columns.Count;i++)
t += ", " + ds.Tables[0].Columns[i].ColumnName.ToString();
sw.WriteLine(t);
foreach(DataRow dr in dt.Rows)
{
t = dr[0].ToString();
for(int i=1;i <ds.Tables[0].Columns.Count;i++)
t += ", " + dr[i].ToString();
sw.WriteLine(t);
}
sw.Close();

Response.Buffer= true;
Response.Charset= "GB2312 ";
Response.ContentEncoding=System.Text.Encoding.GetEncoding( "GB2312 ");
Response.AddHeader( "Content-Disposition ", "attachment; filename=result.csv ");
Response.ContentType= "application/ms-excel ";
Response.Write(sw.ToString());
Response.End();


------解决方案--------------------
xuexi