【问题标题】:C# Grid Paging and ExtJS 4.1C# 网格分页和 ExtJS 4.1
【发布时间】:2012-11-04 15:48:11
【问题描述】:

我正在尝试使用 c# 后端在 extjs 网格 pangel 上实现分页工具栏...我该如何开始呢...我尝试使用 start 和 limit 但我不确定它是如何工作的。有人可以帮助我如何在网格中每页发送大约 20 条记录,因为我的网格正在获取所有 500 个数据,这也减慢了我的应用程序 下面是我的控制器,它将 json 发送到我的商店。请帮助

 public JsonResult getData(int start, int limit)
 {
   List<MyItem> items = new List<MyItem>();
   using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["ApplicationServices1"].ConnectionString))
   {
     SqlCommand cmd = con.CreateCommand();
     cmd.CommandText = "SELECT State, Capital FROM MYDBTABLE";
     con.Open();
     SqlDataReader reader = cmd.ExecuteReader();
     while (reader.Read())
     {
       MyItem item = new MyItem();
       item.State = reader[0].ToString(); 
       item.Capital = reader[1].ToString(); 
       items.Add(item);
     }
     con.Close();

     return Json(new {  myTable = items }, JsonRequestBehavior.AllowGet);
   }
}

这是我的商店

this.store = Ext.create('Ext.data.JsonStore', {
        autoLoad: true,
        storeId: 'mystore1',
        pageSize: 20,
        fields: [
    { name: 'State' },
    { name: 'Capital' } 
    ],
        sorters: [
            {
                property: 'State',
                direct: 'ASC'
            }],
        scope: this,
        proxy: {
            type: 'ajax',
            scope: this,
            url: 'StateC/getData',
            autoLoad: { params: {
                start: 0,
                limit: 20
            }
            },
            reader: {
                type: 'json',
                root: 'myTable'
            }
        }
    });

【问题讨论】:

    标签: c# sql-server-2008 grid paging extjs4.1


    【解决方案1】:

    我目前正在使用 MySQL 和 PHP,所以肯定会错误检查我的语法,但一般逻辑是相似的,但是在 MsSQL 中查询的语法有点模糊。对于 MsSQL 推荐语法的入门,我建议使用此链接:

    http://www.codeguru.com/csharp/.net/net_data/article.php/c19611/Paging-in-SQL-Server-2005.htm

    首先你需要获取extjs在ajax调用时传递的参数:

    int limit = Request.QueryString["limit"];
    int page= Request.QueryString["page"];
    int upperBound = limit * page;
    int lowerBound = limit * (page - 1) + 1;
    

    我认为您的查询也应该是这样的:

    SELECT * FROM (
            SELECT 
                ROW_NUMBER() OVER(ORDER BY person) AS rownum, 
                MYDBTABLE.State, 
                MYDBTABLE.Capital 
            FROM MYDBTABLE
        ) AS States
    WHERE  States.rownum >= {lowerBound} AND States.rownum <= {upperBound}
    

    【讨论】:

    • 感谢您的帮助,斯蒂芬.. 我使用 c#。我已经看过关于 PHP 的各种示例,但我不知道如何在 c# 中进行操作......我什至不知道从哪里开始回答您的问题。我可以从 ajax 调用中传递第一个和最后一个,但是 upperBound 和 lowerBound 的目的是什么,然后它是如何计算“totalProperty”的......某处是否有工作示例
    • 抱歉,我没有看到您传入的起始值和限制值,上限和下限只是说明要采用哪一组 20 条记录。使用您传入的 start 和 limit 值,lowerBound = start,upperBound = start + limit。除此之外,我认为 SQL 查询将在 MsSQL 中运行,并且只会给你一组 20 条记录。如果您在此查询 {cmd.CommandText = "SELECT State, Capital FROM MYDBTABLE";} 中使用它,我认为您的代码将按照您希望的方式工作。不过,您需要将下限/上限连接到其中以将查询构建为字符串。
    • 这个分页又回来了,又开始困扰我... :(... 这些参数是否应该从 extjs 传递...第二页,即使工具栏显示第 2 页
    • 上述方法以前有效吗?正在发送的请求是否发生了任何变化,例如从 get 请求更改为 post 请求?您可以在 Visual Studio 中设置断点并确保生成的 sql 查询有效并且一切正常吗?抱歉回复慢,圣诞节和新年放假。希望您已经找到了解决方案!
    • 非常感谢Stephan...是的,我找到了解决方案...问题出在lowerBound上...我将其更改为lowerBound = start + 1 ...现在可以了... :)
    猜你喜欢
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多