【问题标题】:ASP.NET GridView Pagination using MySQL LIMIT使用 MySQL LIMIT 的 ASP.NET GridView 分页
【发布时间】:2011-03-19 05:06:37
【问题描述】:

我有一个 GridView,我在运行时通过查询将其绑定到数据集。我使用PageIndexChangingPageIndexChanged 事件处理分页,以便在寻呼机回发时设置GridView 的PageIndex 属性。虽然此功能正常,但问题是此表中 > 7800 行的性能。它必须为每个分页操作返回整个结果集。

如果我使用 MySQL LIMIT offset,pagesize 子句,我会在

UPDATE:我的新问题是GridView分页控件消失了,大概是因为每次查询只返回10条记录(PageSize=10)

谢谢, 标记

【问题讨论】:

    标签: asp.net sql mysql gridview pagination


    【解决方案1】:

    你也知道页码,对吧?按页码 * pagesize 偏移。

    【讨论】:

    • 看起来很明显 :) 我的新问题是分页控件消失了,大概是因为每个查询只返回 10 条记录(PageSize=10)。
    【解决方案2】:

    如果您在查询中过滤结果,则必须手动打开分页链接,这是来自 Rolla 的 4 个人的一篇好文章:

    http://www.4guysfromrolla.com/webtech/082901-1.shtml#postadlink

    【讨论】:

      【解决方案3】:

      要修复寻呼机,您必须手动创建它。请参阅这篇尝试相同的文章(它使用 SQL Server for DB,但您也可以在 MySQl 中实现这些想法):http://www.nikhedonia.com/notebook/entry/efficient-paging-for-gridview/

      【讨论】:

        【解决方案4】:

        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>
        

        TypeName 是包含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

        【讨论】:

          猜你喜欢
          • 2013-12-20
          • 1970-01-01
          • 1970-01-01
          • 2020-12-30
          • 2011-04-21
          • 2012-11-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多