2014-04-19 85 views
0

我在ASP.Net是新的,我有一個關於如何工作圍繞的DataBind疑問:爲什麼我的DataTable行在綁定到GridView後被清除?

  • 的Page_Load:如果的IsPostBack = false時,我打開我的DataTable VAR(在Page_Load之外聲明)和將其綁定到GridView。我的想法是保留DataTable,避免對數據庫進行新的查詢。

  • 當我點擊了一個不同的頁面上,在PageIndexChanging有人提出,這樣做:

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
    { 
        GridView1.PageIndex = e.NewPageIndex; 
        GridView1.DataSource = _table; 
        GridView1.DataBind(); 
    } 
    
  • 這並沒有行之有效的,因爲電網表現出空。我在其他實例發現數據源完全重新加載,所以我把加載代碼的功能,改變了我的PageIndexChanging事件:

    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
    { 
        GridView1.PageIndex = e.NewPageIndex; 
        LoadData(); 
        GridView1.DataSource = _table; 
        GridView1.DataBind(); 
    } 
    
  • 不是它的工作就像一個魅力!我知道我的DataTable已經被清除了Page_Load和PageIndexChanging事件之間,可能是因爲數據表var並沒有被服務器保留(記住我是ASP.NET的新手......),但我想明白:

    1. 爲什麼服務器不保留該變量?
    2. 有一種方法可以繞過這種情況,以避免多個服務器數據請求?旁路中有什麼優點&缺點?

非常感謝!

回答

3

服務器不保留該值,因爲每個請求都由頁面類的新實例處理。保存數據表的變量與前一個請求中的變量不同。

如果將數據表存儲在請求之間的某個位置,則可以避免數據庫調用,但缺點是需要使用該資源。如果您將數據表放入查看狀態,則會耗費網絡帶寬並影響頁面加載時間。如果將它存儲在服務器上,它將添加到所使用的內存中,並且跟蹤可以從內存中刪除的數據並不重要。

+0

Guffa是對的。您基本上必須在每個頁面加載時綁定數據,或將數據放入會話變量或Web緩存中。除非你有一個非常繁忙的網站,否則在每個請求中綁定你的數據並不是什麼大不了的事情。 – manit

相關問題