2011-04-11 46 views
1

好的,所以我明白如何使用ASP.net GridView控件的分頁。您可以設置各種方法來允許控件獲取數據的一個子集,以及總共匹配的記錄數。下面是目前我的初始化代碼:有沒有更好的方法來使用ASP.net GridView控件的自定義分頁?

ObjectDataSource dataSource = new ObjectDataSource(); 
dataSource.EnablePaging = true; 
dataSource.SelectParameters.Add(new Parameter("customerId", TypeCode.Int32, customerId.ToString())); 
dataSource.SelectMethod = "SelectSomeRecords"; 
dataSource.StartRowIndexParameterName = "startRowIndex"; 
dataSource.MaximumRowsParameterName = "maximumRows"; 
dataSource.SelectCountMethod = "SelectAllRecordsCount"; 
dataSource.TypeName = "Name.Of.Data.Class"; 

grdUserList.DataSource = dataSource; 
grdUserList.DataBind(); 

這工作,因爲它傳遞了客戶ID,我顯示了用戶,以及開始行索引和最大行數,我的數據類。但有一件事讓我感到困惑。爲什麼控制器需要單獨的方法SelectCountMethod?在數據庫層,我有一個存儲過程,它返回匹配行的總數作爲輸出參數以及請求的子集。如果DataGrid簡單地允許我的SelectMethod返回一個整數,則表明在應用startRowIndexmaximumRows之前匹配的記錄總數會更容易。

This MSDN page似乎暗示(在其示例中)應該存儲HttpRuntime.Cache中的記錄數,並且過期時間爲5分鐘。在我看來,這似乎是一個非常完美的解決方案。您可能會有5分鐘的數據可能發生變化,您可以在回撥記錄的總數時致電SelectMethod!無論如何,您將在呈現分頁控件的同時獲取這些信息。

我的問題是,有沒有辦法讓GridView通過返回值或out參數調用'select method'來同時獲得'所有記錄數'數字?如果不是,假如我打電話給SelectMethod時,我會得到「所有記錄數」的數字,那麼如何解決這個奇怪的需求?這兩個數據有兩種方法?目前,我傾向於將該值存儲在Session中,並將其設置爲SelectMethod,然後將其返回SelectCountMethod

回答

1

只是爲了更新,我最終做的是編寫自己的分頁類,並且一次向GridView提供一頁信息。我發現它的內置分頁機制將被嚴重實施。使用自己的分頁類的其他好處是可以將其與其他沒有內置分頁的ASP.net控件一起使用,如Repeater。

相關問題