2010-07-21 74 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