2010-12-22 14 views
1

我目前有一個數據網格綁定到一個有數萬條記錄的表上。我使用現有的asp.net 2.0顯示數據網格。我一次顯示十條記錄。ASP.NET 2.0 Grids中的分頁改進

我的問題是每當我嘗試訪問下一個頁面時,我從數據庫中再次獲取所有記錄,然後顯示所需的記錄。這會減慢應用程序的速度。 .net 2.0中有哪些功能可以幫助我優化這個問題?我不能使用第三方控件或ajax。

更新 我無法使用SQL一次獲得10條記錄。在不改變任何現有的業務邏輯或數據檢索的情況下,我想要這樣做。

回答

5

您可以在SQL和/或存儲過程中進行分頁。

基本上,您將頁面上的項目數量和頁面上的項目數量傳遞給存儲過程。例如,每頁有3頁和20頁記錄。

如果您可以使用SQL Server 2005或更高版本,則可以使用一些更新的關鍵字,以便查詢。

這裏是這樣的查詢的簡單版本:

SELECT ClientName, RowNumber 
FROM (SELECT ClientName, ROW_NUMBER() OVER (ORDER BY ClientName) AS RowNumber 
FROM Clients) AS cl 
WHERE RowNumber BETWEEN 12 AND 30 

你會做上述的「12」和「30」是輸入參數的值。

這樣,您只返回要顯示的行。

+0

是的但我無法做到這一點:(不改變任何現有的業務邏輯或數據檢索,我想這樣做 – tHeSiD 2010-12-22 20:35:02

0

在存儲過程中進行分頁。看看這個使用ROW_NUMBER()函數。創建一個將調用存儲過程並使用ObjectDataSource將其連接到網格的類。

1

您可以將數據源粘貼在會話中。

然後檢查您的DataSource是否爲會話中的null,然後獲取它。

這樣,您只能獲得一次數據,並且如果您需要獲取新數據(比如說因爲更新了某些內容),只需清空保存數據源的會話變量即可。

編輯:

這裏有一個例子半的嘗試,(我的意思是我不打算到如何更改頁面,因爲我假設你已經知道如何做到這一點)

protected void PageChanging(object sender, GridViewPageEventArgs e) 
{ 
    if(Session["YourSessionVariableForData"] == null) 
    Session["YourSessionVariableForData"] = YourDataCall(); 
    YourGridView.PageIndex = e.NewPageIndex; 
    YourGridView.DataSource = ((YourDataType)Session["YourSessionVariableForData"]); 
    YourGridView.DataBind(); 
}