2011-11-06 16 views
0

後,我寫了一個自定義網格視圖,我想保存電網DataSourceViewState,但我得到這個例外如何保持電網的DataSource回傳

類型「<> f__AnonymousType0`7 [System.Int32 ,mscorlib,Version = 2.0.0.0, Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.String, mscorlib,Version = 2.0.0.0,Culture = neutral, PublicKeyToken = b77a5c561934e089],[System.String,mscorlib, 版本= 2.0.0.0,文化=中性 公鑰= b77a5c561934e089],[System.Boolean,mscorlib程序, 版錫永= 2.0.0.0,文化=中性 公鑰= b77a5c561934e089],[System.String,mscorlib程序, 版本= 2.0.0.0,文化=中性 公鑰= b77a5c561934e089],[System.Int32,mscorlib程序, 版本= 2.0.0.0,Culture = neutral, PublicKeyToken = b77a5c561934e089],[System.Int32,mscorlib, Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]' in Assembly'ExtAspNet.Examples,Version = 1.0。 0.0,Culture = neutral, PublicKeyToken = null'未標記爲可序列化

現在,我想知道如何保持網格DataSource

回答

1

事情,都必須用[Serializable]屬性加以裝飾,而是因爲你有一個匿名類型,你不能做到這一點。

但除此之外,不要做你正在嘗試做的,這將大大和不必要地增加你的頁面大小。如果有的話,把你的數據源放在會話中,並在回發中重新綁定它,但不要放在視圖狀態。

但請注意,在會話中放置大量數據是不可擴展的,也不是一個好的做法,您必須根據數據大小以及從數據大小獲取數據需要多少時間後端商店。您是否測量了獲取數據的成本如何?例如,您可以使用Cache而不是Session嗎?

+0

多達2500個用戶使用我的應用程序和我的所有報告都使用這個網格控件,所以我寧願保留數據在ViewState而不是服務器內存。 –

+0

有了更多的理由:使用某種分佈式緩存(如memcached或appfabric),ViewState根本就不是這樣做的方法。 – Icarus

+0

@Mehdi Hadjar,我想你錯過了ViewState的概念,它會減慢客戶端的速度,並且帶寬非常高,ViewState會隨着你的用戶數量來獲得這個想法,它不會讓你的服務器變慢嗎?如果你的內存有限,爲什麼不從DB查詢每個回發,或者如果你想轉儲到客戶端,爲什麼不把它存儲在像JSON這樣的JavaScript變量中,並且在沒有回發的情況下操作數據。 – CallMeLaNN

0

如果你結合你的一個數據表,你可以做這樣的gridview的數據源....

聲明數據表如下,如預期

private string _theDataTable="theDataTable"; 
    private DataTable theDataTable 
    { 
      get 
      { 
        if(ViewState[_theDataTable]==null) 
          return new DataTable(); 
        return (DataTable)ViewState[_theDataTable]; 
      } 
      set 
      { 
        ViewState[_theDataTable] = value; 
      } 
    } 

歡呼聲一切都將正常工作!

你試圖把在ViewState
+0

Thaks,但我沒有DataTable的問題 –