2011-08-18 211 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