当前位置: 移动技术网 > IT编程>开发语言>.net > Asp.net中的GridView导出遇到的两个问题和解决方法

Asp.net中的GridView导出遇到的两个问题和解决方法

2017年12月12日  | 移动技术网IT编程  | 我要评论

wwe大赛,测试脑残指数,钱文忠老婆

对于gridview导出的内容的代码大致如下:
response.clear();
response.buffer = true;
response.charset = "gb2312";
response.appendheader("content-disposition", "attachment;filename=" + filename + ".xls");
response.contentencoding = system.text.encoding.getencoding("gb2312");
response.contenttype = "application/ms-excel";
this.enableviewstate = false;
system.globalization.cultureinfo mycitrad = new system.globalization.cultureinfo("zh-cn", true);
system.io.stringwriter ostringwriter = new system.io.stringwriter(mycitrad);
system.web.ui.htmltextwriter ohtmltextwriter = new system.web.ui.htmltextwriter(ostringwriter);
this.grid1.rendercontrol(ohtmltextwriter);
response.write(ostringwriter.tostring());
response.end();
//grid1为表格的id

注:蓝色标识代码为出错的那行代码。
ok,好不容易敲完代码,运行程序测试。蹬,报错了。
问题一:类型“grid1”的控件“gvcomparedetail”必须放在具有 runat=server 的窗体标记内。
注:grid1为表格的id。

查找网上的解决大致为:
1)把grid放到<form runat="server"></form>间。
2)给grid加标记runat="server"。
查明前台grid确实有加标记runat="server"的,而且表格是放在form中的。
解决方法:在后台代码加上以下重写方法
public override void verifyrenderinginserverform(control control)
{ }
查找msdn说明,该函数的作用在于:确认在运行时为指定的 asp.net 移动控件呈现 form 控件。
语法:
c#
复制代码 代码如下:

public override void verifyrenderinginserverform(
    control control
)

参数
control
类型:system.web.ui..::.control
必须位于 form 控件中的 asp.net 移动控件。
备注
如果在运行时控件未包含在 form 中,则此方法将重写 page..::.verifyrenderinginserverform 方法以引发异常。
如果回发或使用客户端脚本的服务器控件没有包含在 htmlform 服务器控件 (<form runat="server">) 标记中,它们将无法正常工作。这些控件可以在呈现时调用该方法,以在它们没有包含在 htmlform 控件中时提供明确的错误信息。
开发自定义服务器控件时,通常在为任何类型的输入标记重写 render 方法时调用该方法。这在输入控件调用 getpostbackeventreference 或发出客户端脚本时尤其重要。复合服务器控件不需要作出此调用。
ok,加上以上的函数,编译运行调试。晕,又出现了别外一个错误。

问题二:只能在执行 render() 的过程中调用 registerforeventvalidation。

看样子,以上加的那个函数并没有彻底解决问题了。
经过一番搜索和尝试,终于把问题解决了。

解决方法1:把上面的函数verifyrenderinginserverform去掉,在导出代码中,动态添加一个form对象,一个page对象,把表格加入它,并把form添加给page。
导出的代码如下:
复制代码 代码如下:

page p=new page();
htmlform form=new htmlform();
grid1.enableviewstate = false;
p.enableeventvalidation = false;
p.designerinitialize();
form.controls.add(grid1);
p.controls.add(form);
stringbuilder sb=new stringbuilder();
stringwriter sw=new stringwriter(sb);
p.rendercontrol(sw);
response.clear();
response.buffer = true;
response.contenttype = "application/vnd.ms-excel";
response.addheader("content-disposition", "attachment;filename=" + filename + ".xls");
response.charset = "utf-8";
response.contentencoding = encoding.default;
response.write(sb.tostring());
response.end();

解决方法2:修改web.config(不推荐)<pages enableeventvalidation ="false" ></pages>

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网