工作中可能需要把DataGrid的内容导出到其他的文件中,比如文本文件,EXCEL文件,WORD文件等等。

对于WORD、EXCEL文件,可以使用下面的方法(以下以EXCEL为例):

   Response.Clear();
   Response.Buffer= true;
   Response.Charset="GB2312";    Response.AppendHeader("Content-Disposition","attachment;filename=Excel.xls");  Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
   Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
   this.EnableViewState = false;    System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
   System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);    DataGrid1.RenderControl(oHtmlTextWriter);    Response.Write(oStringWriter.ToString());    Response.End();


这里使用了DataGrid的RenderControl方法,该方法输出DataGrid格式化的Html内容到一个Writer,这样,我们就可以在服务器端获得DataGrid的Html格式的代码了。

由于WORD、EXCEL都是带格式化的,所以能轻松识别HTML格式的内容,但对TEXT文件就不行了,上面的代码输出的TXT文件将是包含HTML格式的TXT文件,而不是想象中的DATAGRID的文本内容。解决办法是采用HTMLCONTROL。

HTMLCONTROL都有innerHTML和innerText两个属性,这里就利用这两个属性实现文本的导出:

HtmlGenericControl div=new HtmlGenericControl();

div.innerHTML=oStringWriter.ToString();

div.innerText就是要输出的文本了,所以上面的代码修改为:

Response.Clear(); 
Response.Buffer= true; 
Response.Charset="GB2312";    
Response.AppendHeader("Content-Disposition","attachment;filename=Excel.xls");
Response.ContentEncoding=System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。 
this.EnableViewState = false;    System.IO.StringWriter oStringWriter = new
System.IO.StringWriter(); 
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);    
DataGrid1.RenderControl(oHtmlTextWriter); 

HtmlGenericControl div=new HtmlGenericControl();
div.InnerHTML=oStringWriter.ToString();
Response.Write(div.InnerText);   

Response.End();

Posted on 2006-12-22 11:36  李通通  阅读(231)  评论(0编辑  收藏  举报