如何使用start和limit进行分页

问题描述 投票:0回答:2

我正在尝试使用网格分页。以下方法将表中的所有内容提供给网格。如何考虑开始和限制,其中开始是页码,限制是每页的记录。基本上,extjs 工具栏会查找我的方法来返回启动并按需限制。我已经尝试了很多解决方案,但似乎不起作用。这就是为什么我以简单的方式把它放在这里。

这是我的 C# 结束

public string myRecord(int start, int limit)
{
    List<gridPaging> result = new List<gridPaging>();
    using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices2"].ConnectionString))
    {
        SqlCommand cmd = con.CreateCommand();

        cmd.CommandText = "SELECT * FROM myTable ORDER BY Q1";
        con.Open();
        SqlDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
        {
            gridPaging gp = new gridPaging();

            gp.Column1 = reader["Column1"].ToString().Trim();
            gp.Column2 = reader["Column2"].ToString().Trim();
            gp.Column3 = reader["Column3"].ToString().Trim();
            gp.Column4 = reader["Column4"].ToString().Trim();
            result.Add(gp);
        }

        return JsonConvert.SerializeObject(result);
    }
}
c# sql-server-2008 pagination extjs4.1
2个回答
3
投票

如果这与您当前的实现类似,您可以修改 SQL 以利用

ROW_NUMBER
:T-SQL:使用 ROW_NUMBER() 进行分页

或者,如果您有某种 LINQ 实现,则可以使用

.Skip()
.Take()
方法来进行分页。


2
投票

在 T-SQL 中,有两个内置函数可以帮助您:第一个是

Row_Number
函数,它按特殊 ORDER BY 子句的顺序为结果集的每一行分配一个唯一的递增序数,第二个是
TOP
关键字,它将最大行数限制为被退回。

基本上,您的查询应该如下所示:

SELECT TOP @limit * FROM myTable WHERE (ROW_NUMBER() OVER (ORDER BY Q1)) > @limit * @start ORDER BY Q1

然后,您可以使用 Command.CreateParameter 从 C# 代码中插入参数 @start 和 @limit 的值。例如,对于第三页结果(使用零索引

start
值为 2),每页有 15 个结果,其计算结果为语句

SELECT TOP 15 * FROM myTable WHERE (ROW_NUMBER() OVER (ORDER BY Q1)) > 30 ORDER BY Q1

...它提供了整个查询中从 31 到 45 的行,前两页的查询分别生成了 1-15 行和 16-30 行。

© www.soinside.com 2019 - 2024. All rights reserved.