簡體   English   中英

ASP.NET 2.0網格中的分頁改進

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM