读书人

GridView导出Excel急需注意的地方

发布时间: 2012-07-19 16:02:20 作者: rapoo

GridView导出Excel需要注意的地方

将GridView中的数据导出为Excel,然后由用户选择是保存还是打开打印,虽然代码比较简单。
无非就是用IO流去写成为Excel,但是有很多细节稍不注意就为成为困扰。

? 还是写下来,以后碰到了来查查。

???? 先贴个源码:

???

?? public override void VerifyRenderingInServerForm(Control control)
{ }

??? protected void Print_ServerClick(object sender, EventArgs e)
??? {
??????? Response.Clear();
??????? Response.Buffer = true;
??????? Response.Charset = "GB2312";
??????? string filename = "attachment;filename=" + System.Web.HttpUtility.UrlEncode( this.DropDownList1.SelectedItem.Text + "年" + this.DropDownList2.SelectedItem.Text + "月技术交易奖酬金",System.Text.Encoding.UTF8)+".xls";
?Response.AppendHeader("Content-Disposition", filename);
?// 如果设置为 GetEncoding("GB2312");导出的文件将会出现乱码!!!
?Response.ContentEncoding = System.Text.Encoding.UTF7;
?Response.ContentType = "application/ms-excel";//设置输出文件类型为excel文件。
?System.IO.StringWriter StringWriter = new System.IO.StringWriter();
?System.Web.UI.HtmlTextWriter HtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
?this.GVStart.AllowPaging = false;
?BindGridView();

??????? this.GVStart.RenderControl(oHtmlTextWriter);
??????? Response.Output.Write(oStringWriter.ToString());
??????? Response.Flush();
??????? Response.End();

??????? this.GVStart.AllowPaging = true;
??????? this.GVStart.PageIndex = 0;
??????? BindGridView();

??? }

???? 1:首先在打印页面的HTML<%@ Page/>标签中加入EnableEventValidation = "false",否则可能会出现

???? 错误:只能在执行 Render() 的过程中调用 RegisterForEventValidation

???? 2:重写方法? public override void VerifyRenderingInServerForm(Control control) ,否则会出现,GridView控件

???? 必须出现在 RunAt="server" 标签中,原因嘛,就不在此嗦了。
???? 3:文件名中文乱码,很简单用 System.Web.HttpUtility.UrlEncode转换一下为UTF8就好了。

???? 4:至于分页的GridView。在输出前把分页禁用,绑定所有数据后输出,完成后在重新启用分页就好了。

?

读书人网 >行业软件

热点推荐