Farseer

导航

将查询结果导出到客户端的EXCEL中(四)

利用DataGrid,直接将数据输出到Excel中,原理跟从服务器下载文件一样。示例代码如下:
/// <summary>
            
/// 将DataGrid中的数据输出到客户端的Excel中
            
/// </summary>
            
/// <param name="ultraWebGrid">待输出的DataGrid</param>

            private void RenderExcel(System.Web.UI.WebControls.DataGrid ultraWebGrid) 
            

                
//当前页面的响应
                HttpResponse response = HttpContext.Current.Response; 
             
                response.Charset 
= "GB2312";    //字符集
                response.ContentEncoding = Encoding.GetEncoding("GB2312"); //设置编码方式
                response.ContentType = "application/msexcel";                //设置输出方式
                response.AppendHeader("Content-Disposition"
                    
"attachment;filename=" +HttpUtility.UrlEncode(_fileName)); //http头
 
                CultureInfo cult 
= new CultureInfo("zh-CN"true); 
                StringWriter sw 
= new StringWriter(cult);             
                HtmlTextWriter writer 
= new HtmlTextWriter(sw); 
 
                writer.WriteLine(
"<meta http-equiv=\"Content-Type\" content=\"text/html;charset=GB2312\">"); 
             
                
if (ultraWebGrid != null
                

                    ultraWebGrid.RenderControl(writer);        
//输出
                }
 
                ultraWebGrid.Dispose();                        
//释放DataGrid
 
                response.Write(sw.ToString()); 
                response.End();                                
//输出结束
            }

跟下载一样,由于调用了response.End()方法,有可能会造成一些异常,就像调用Response.redirect("")会引发潜在的“线程正在被终止”的异常一样。当然那个异常可以转向其他页面而逃之大吉,不必理会那个异常(也可以通过调用Response.redirect("",false)避免这个异常),可是下载却不像转向页面那般轻松,他要固守阵地,留在原来的页面。

这样造成的负面影响是使页面的某些控件失去响应,某些JavaScript不再运行。这是很讨厌的事情。
由于与现在的负面效应以及原因相同,将在讲述下载实现的时候一并解决。

好了,至此将DataGrid或者服务器上的数据下载到客户端Excel的四种方法就总结完毕了。总得来说,我比较倾向于用从DataGrid中导出的方式,这样的速度也是最快的,并且没有并发,格式等的困扰。由于项目时间很紧,没有来得及深入研究response.End()引发异常的原因及解决方案,导致下载时会引发用户控件失效,最终放弃了这种做法。采用了第二种方式,效果差强人意。在采用OLEDB读写Excel的时候也遇到了很多一些奇怪的问题,将在下面的文章中描述。

posted on 2005-03-08 20:48  佛西亚  阅读(655)  评论(1编辑  收藏  举报