簡體   English   中英

PostBack 后在 GridView 中保留數據源

[英]Persisting DataSource in GridView after PostBack

所以我的 ASPX 頁面中有一個 GridView。

當我單擊<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)

這也是 null。

持久化這些數據的標准方法是什么? 我真的不想再次訪問數據庫,因為它是一個相當長的 SPROC 並且用戶已經等待了一次。

提前致謝!

Class 級別變量在回發時無法保持其值。

但是有兩種方法可以在頁面的 PostBack 上維護數據: ViewState and Session State 但我建議在您的場景中將其放在ViewState中。

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

然后您可以在頁面回發中訪問它:

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

如下聲明數據表,一切都會按預期工作

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

干杯!

謝謝大家的回答。

我避免不必要地將東西放入 VeiwState 或 session,所以我認為保存這些數據的最佳方法是緩存它。

我認為MemoryCache是最合適的地方,這就是我最終實現它的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM