2011-08-18 166 views
1

我想导出一个Gridview到excel。我将gridview绑定到一个集合,可以看到它有6个数据行,但是当我调用RenderControl时,它会返回一个空字符串。下面是我使用的代码Gridvew.RenderControl返回空字符串

Gridview1.DataSource = data; 
Gridview1.DataBind(); 
System.IO.StringWriter sw = new System.IO.StringWriter(); 
System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw); 
Gridview1.RenderControl(htw); 
var outputHtml = sw.ToString(); 

当我检查outputHtml它是一个空字符串。我在这段代码中做错了什么。

有一点需要注意的是,gridview是躺在一个窗体内runat ='服务器'标记,我还没有重写VerifyRenderingInServerForm方法。

+0

凡在本页面生命周期你执行这个代码? – magnattic

+0

我正在做这个回发,单击一个按钮事件 – DotNetJourneyMen

回答

1

我最好的选择是你已经将GridView的可见性设置为false。这将阻止渲染控制,因为......现在它不可见。结果是一个空字符串。

如果你不想显示GridView控件,只需设置能见度为true,您执行渲染代码,并设置回之后才:

gv_sample.Visible = true; 
    System.IO.StringWriter sw = new System.IO.StringWriter(); 
    System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw); 
    gv_sample.RenderControl(htw); 
    var outputHtml = sw.ToString(); 
    gv_sample.Visible = false; 

你可能会碰到与RenderControl方法麻烦现在。如果是这样,请确保您已在Page指令集EnableEventValidation="false"并覆盖VerifyRenderingInServerForm方法:

public override void VerifyRenderingInServerForm(Control control) 
{ 
    return; 
} 
+0

如果它仍然不适合你,我将需要从你的页面和你使用的.NET版本更多的代码。 – magnattic

+0

就是这样,谢谢 – DotNetJourneyMen

+0

很高兴能帮到你。请将此答案标记为“已接受”。 :) – magnattic