2011-05-25 49 views
6

所以我在我的ASPX頁面中有一個GridView。PostBack後在GridView中持久DataSource

當我點擊<asp:Button id="btnBindIt" runat="server" />它結合數據表如下:

theDataTable = GetAllTheRecords(); 
gvTheGridView.DataSource = theDataTable; 
gvTheGridView.DataBind(); 

注:theDataTable是成員

private DataTable theDataTable; 

可正常工作。

現在,是很好的顯示在GridView後,我想將數據導出到CSV,所以我現在點擊它運行的代碼<asp:Button id="btnExportIt" runat="server" />

exportToCsv(theDataTable); 

theDataTable爲空。

所以,我想

exportToCsv(gvTheGridView.DataSource) 

這也是空。

堅持這些數據的標準方式是什麼?我不想再次擊中數據庫,因爲這是一個很長的SPROC,用戶已經等了一次。

在此先感謝!

回答

-2

感謝大家的回答。我會避免不必要地將東西放入VeiwState或會話中,所以我認爲堅持這些數據的最佳方式就是緩存它。

我認爲MemoryCache是最合適的地方,是我如何最終實現它。

+1

-1:http:// stackoverflow。com/questions/15408117/why-isnt-caching-system-web-caching-cache-used-for-state-management – 2013-03-14 12:05:02

+0

我認爲在會話中存儲大量這樣的數據是一個壞主意。對我而言,我的解決方案是不存儲我在數據綁定中計劃的結果,而是通過緩存使查詢得到更快的結果。它適合我的情況。 – 2013-03-26 04:49:09

11

級別變量無法在回發時保持它們的值。

但是有兩種方法可以在頁面的PostBack上維護數據:ViewState and Session State。 但是我建議在你的情景中把它放在ViewState

ViewState["theDataTable"] = theDataTable; 
Session["theDataTable"] = theDataTable; 

然後你就可以訪問它的網頁提交:

DataTable theDataTable = (DataTable)ViewState["theDataTable"]; 
DataTable theDataTable = (DataTable)Session["theDataTable"]; 
+0

謝謝穆罕默德。 我很關心使用大數據集的會話或視圖狀態。你會建議爲大數據集做這個嗎? – 2011-05-25 04:40:26

+0

如果將Gridview數據導出爲CSV,該怎麼辦? – 2011-05-25 05:11:18

+0

另一種方法是,您可以在服務器上迭代Gridview行,並從Gridview中提取DataTable,然後將其導出爲csv。 – 2011-05-25 05:14:28

5

聲明數據表如下,如預期

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

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

+0

而不是編寫'返回新的DataTable();'在ViewState爲空的情況下,最好從數據源(數據庫或從前是什麼)獲取新數據。 – WAQ 2016-07-31 07:02:22

相關問題