2011-02-14 53 views
2

我有一個ASP.NET Web窗體上的GridView,我已綁定到數據源並將其設置爲每頁有10個記錄。離開Gridview後維護GridView當前頁面索引頁面

我在GridView上也有超鏈接列,這樣用戶可以從列表中導航到另一個頁面(詳細信息頁面)。在詳細資料頁面,他們有「後退」按鈕返回到GridView頁面

編輯
只是爲了澄清查詢

我在尋找關於如何指定服務器端示例代碼段數據綁定後設置GridView的頁面索引。這個想法是確保用戶導航到他們所在的相同頁面索引。

回答

2

三個在您的處置基本選項更新您的鏈接。他們每個人都有自己的缺點和長處:

  1. 使用查詢字符串將要求您格式化導致頁面的gridview的各個環節都在查詢字符串正確的信息(這可能最終會被多隻一個頁碼)。
  2. 如果您確定每個瀏覽器實例都想要轉到同一個網格視圖,那麼使用會話將很有用,否則您將不得不使用一些id關鍵字標記會話變量,這些id關鍵字可以針對每個有問題的gridview頁面進行唯一標識。這可能會導致會話管理中的很多變量可能完全不受歡迎,因爲它們中的大多數只能通過超時過期。
  3. 使用cookie需要類似的地方,cookie數據存儲在密鑰/數據矩陣中(優化後的哈希表可能適用於此)。不建議爲每個你正在跟蹤的gridview頁面設置一個單獨的cookie名稱,而是建立一個具有通用名稱的cookie,該名稱保存所有被跟蹤的gridview頁面的數據,並且內部具有鍵/值結構。

編輯:設置頁面索引的小代碼片段。

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
    { 
     try 
     { 
      if(HttpContext.Current.Request["myGVPageId"] != null]) 
      { 
       myGridview.PageIndex = Convert.ToInt32(HttpContext.Current.Request["myGVPageId"]); 
      } 
     } 
     catch(Exception ex) 
     { 
      // log it 
     } 
    } 
} 
0

你必須使用查詢字符串,並建議使用,否則你可以使用會話對象,但不要使用它,因爲你可能有網格視圖在不同的頁面打開,所以使用查詢字符串。查詢字符串,會話cookie的:

gridView1.CurrentPageIndex = (Request["pageNo"] != null) ? Request["pageNo"] as int : 0; 
gridView1.DataSource = myDataSet; 
gridView1.DataBind(); 

你可以GridView_DataBound事件

+0

我編輯了查詢,我找了示例代碼段如何後在服務器端 – 2011-02-14 11:40:15

+2

數據綁定GridView的設置頁面索引這是不正確的你「必須」使用查詢字符串... – LeeCambl 2014-09-04 19:36:18

2

我更會話方法的風扇,個人。只需將頁面索引保存爲會話變量,並且如果在加載頁面時該Session變量不爲空,則使用它來激活「OnPageIndexChanging」方法,如下所示:

設置當前頁碼變化:

protected void GridViewIndexChanging(object sender, GridViewPageEventArgs e) 
    { 
     myGridView.PageIndex = e.NewPageIndex; 
     Session["pageNumber"] = e.NewPageIndex; 
     //whatever your page index changing does... 
    } 

然後,在Page_Load中做這樣的事情:

 if (!IsPostBack) 
     { 
      if (Session["pageNumber"] != null) 
      { 
       GridViewIndexChanged(myGridView, new GridViewPageEventArgs((int)Session["pageNumber"])); 
      } 
     } 
1

您可以正餐的GridView的頁面索引更改事件,並找出當前的頁面索引E:摹

yourGridId.PageIndex=e.NewPageIndex; 
ViewState["GridPageIndex"]=e.NewPageIndex; 

在pageLoad的獲取ViewState的價值

string pIndex=string.Empty; 
pIndex=Convert.toInt32(ViewState["GridPageIndex"]); 
if(!string.Empty(pIndex)) 
{ 
yourGridId.PageIndex =pIndex; 
}