工作中可能需要把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();