[英]Pagination improvements in ASP.NET 2.0 Grids
我目前有一個綁定到具有成千上萬條記錄的表的數據網格。 我使用現有的asp.net 2.0顯示datagrid。 我一次顯示十條記錄。
我的問題是,每當我嘗試訪問下一頁時,我都會再次從數據庫中獲取所有記錄,然后顯示所需的記錄。 這會使應用程序變慢。 .net 2.0中是否有功能可以幫助我優化此問題? 我不能使用第三方控件或ajax。
更新我也不能使用SQL一次獲取10條記錄。 在不更改任何現有業務邏輯或數據檢索的情況下,我想這樣做。
您可以在SQL和/或存儲過程中進行分頁。
基本上,您會向sproc傳遞頁面上的項目數以及您所在的頁面。 例如,第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”以上的值作為輸入參數。
這樣,您只返回要顯示的行。
您可以將數據源保留在會話中。
然后在會話中檢查您的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();
}
在存儲過程中進行分頁。 考慮使用ROW_NUMBER()函數。 創建一個將調用存儲過程的類,並使用ObjectDataSource將其連接到網格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.