work on asp.net vs05
。我的gridview有几列,其中一些包含文字,一些包含复选框,如果我删除复选框则不会产生任何错误,如果我不删除复选框并想要以 excel或pdf 导出,那么我会收到以下错误:
****RegisterForEventValidation can only be called during Render();****
为什么我会收到此错误。如何解决?
我的C#代码是:
public void ToExcel()
{
string attachment = "attachment; filename=Employee.xls";
Response.ClearContent();
Response.AddHeader("content-disposition", attachment);
Response.ContentType = "application/ms-excel";
StringWriter stw = new StringWriter();
HtmlTextWriter htextw = new HtmlTextWriter(stw);
gvSearch.RenderControl(htextw);
Response.Write(stw.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
}
昨天我发布了一个问题名称“gridview to excel”.url:http://stackoverflow.com/questions/1665958/gridview-to-excel/1669977#1669977
我应用这个问题的答案,但它不起作用。帮我导出excel。
答案 0 :(得分:1)
您应该尝试 Matt Bereseth 的 GridView export utility 。它可以设法使用checkBoxes和其他HTML控件进行导出。它通过用实际值替换控件来实现这一点。
(来源:mattberseth.com)
看看这个功能,它是不言自明的。您可以下载该库并自行试用。
/// <summary>
/// Replace any of the contained controls with literals
/// </summary>
/// <param name="control"></param>
private static void PrepareControlForExport(Control control)
{
for (int i = 0; i < control.Controls.Count; i++)
{
Control current = control.Controls[i];
if (current is LinkButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));
}
else if (current is ImageButton)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));
}
else if (current is HyperLink)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));
}
else if (current is DropDownList)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));
}
else if (current is CheckBox)
{
control.Controls.Remove(current);
control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));
}
if (current.HasControls())
{
GridViewExportUtil.PrepareControlForExport(current);
}
}
}
答案 1 :(得分:0)
将 EventValidation 设置为 false。
<%@ Page Language="C#" AutoEventWireup="true"
CodeFile="Records.aspx.cs" Inherits="Records"
MasterPageFile="~/Master.master"
EnableEventValidation="false"