2010-07-21 75 views
3

我有我通過查詢在運行時綁定到數據集的GridView。我處理使用PageIndexChangingPageIndexChanged事件來設置從尋呼機回傳GridView的PageIndex屬性分頁。而正確地此功能,問題是與在此表> 7800行的性能。它必須返回每個分頁操作的整個結果集。ASP.NET GridView的分頁使用MySQL LIMIT

如果我使用MySQL LIMIT offset,pagesize條款,我得到了< 50ms的結果。我的問題是如何使用LIMIT子句中我的查詢加快分頁?我不知何故需要動態計算偏移量。我通過GridView.PageSize知道運行時的頁面大小。

UPDATE:我的新的問題是,在GridView分頁控件消失,大概是因爲只有10個記錄每個查詢(每頁= 10)

謝謝, 馬克

回答

0

你也知道返回頁面數字,對嗎?由pagenumber * pagesize偏移。

+0

當你看似乎是顯而易見的它:) 我的新問題是,分頁控制消失,大概是因爲從每個查詢返回(頁面大小= 10)只有10個記錄。 – 2010-07-21 20:25:42

+0

這是一個不同的問題。 – MCain 2010-07-21 20:41:44

0

ObjectDataSource控件(http://msdn.microsoft.com/en-us/library /9a4kyhcx%28v=vs.90%29.aspx)可以自定義尋呼的機制,並且可以通過處理大量數據的尋呼。自定義分頁可確保一次只從數據庫中檢索特定頁面數據所需的精確記錄集。

ObjectDataSource控件的用法如下:

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
    OldValuesParameterFormatString="original_{0}" TypeName="ProductsBLL" 
    SelectMethod="GetProductsPaged" EnablePaging="True" 
    SelectCountMethod="TotalNumberOfProducts"> 
</asp:ObjectDataSource> 

類型名是包含的GetProductsPagedTotalNumberOfProducts函數的類的名字。所述的ProductsBLL類的可能的表示如下:

public class ProductsBLL 
{ 
    public int TotalNumberOfProducts() 
    { 
    int recordCount = 0; 
    if (databaseObj.OpenDatabase()) 
    { 
     recordCount = databaseObj.DBTotalNumberOfProducts(searchQuery); 
     databaseObj.CloseDatabase(); 
    } 
    return recordCount; 
    } 

    public DataTable GetProductsPaged(int startRowIndex, int maximumRows) 
    { 
    DataTable pagedDataDV = null; 
    if (databaseObj.OpenDatabase()) 
    { 
     pagedDataDV = databaseObj.DBGetProductsPaged(searchQuery, startRowIndex, maximumRows); 
     databaseObj.CloseDatabase(); 
    } 
    return pagedDataDV; 
    } 
} 

功能DBTotalNumberOfProducts得到本對於給定的查詢的行的總數。功能DBGetProductsPaged使用MySQL LIMIT關鍵字從查詢數據庫中獲取數據。 LIMIT使用startRowIndexmaximumRows變量中的值。 maximumRows的值將是一個常量,並且應該與網格的頁面大小相同。

GridData.DataSourceID = "ObjectDataSource1"; 
GridData.DataBind(); 

以下網站會給ObjectDataSource控件的更多信息:

的數據可以通過使用下面的代碼來綁定到網格控制http://msdn.microsoft.com/en-us/library/bb445504.aspx