2011-03-31 149 views
3

嗨 我綁定一個DataTable到一個gridview。 我想在某些回發事件中使用DataTable,並且ii想使用viewstate。 確實gridview保存數據在viewstate?如果沒有什麼是做這件事的最好方法。gridview保存視圖狀態的數據?

(完整的故事: 我有一個自定義的GridView從標準asp.net gridview的衍生, 和我把標題按鈕導出數據到Excel,我想使用保存在ViewState中的數據導出到Excel)

感謝

+1

的ViewState不[「刪除需要重新填充在每次請求的數據」( http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx) – Greg 2011-03-31 18:21:21

回答

6

簡短的回答是肯定的,在GridView顯示信息,就像任何控制的當前狀態,存儲在ViewState中。但是,我認爲如果可能的話,將這些數據從WebControls可用的ViewState集合中解放出來並不容易。相反,ASP.NET在生命週期中運行事件處理程序之前從ViewState中填充值,因此如果在處理程序中詢問GridView對象服務器端,應該會看到單元格的當前值。

+0

謝謝,但我需要一個直接的答案。 – ehsan 2011-03-31 17:26:42

+6

實際上這非常直接。他回答了你關於ViewState存儲的問題,並提出了一種檢索數據的方法。 – 2011-03-31 18:06:18

4

還有像其他的方法:

1:在會話中存儲你的數據表

2:根據所導出按鈕多久將要使用和獲取的數據量,你可以做一個數據庫調用。

+0

+1如果您需要的數據完全相同,請執行#1。如果你不這樣做,那麼做#2。您的數據庫應該能夠比Web服務器的會話更好地處理它。 – Greg 2011-03-31 18:19:13

0

以下聲明將使思路明確:

這清楚地表明,gridview的數據存儲在視圖狀態:

//Binding GridView 
gv_Settlements.DataSource = dt_settlements; 
gv_Settlements.DataBind(); 

//Retrieving Data 
DataTable dt = (DataTable)gv_Settlements.DataSource; 
+2

如果所有三個語句都在相同的請求中運行,那麼'dt' ='dt_settlements'。如果前兩行在一個請求中運行,並且最後一行在第二個和'gv_Settlements.ViewStateMode = UI.ViewStateMode.Disabled'中,那麼dt將不起作用。 – Trisped 2012-12-12 20:59:40