【问题标题】:Server Side Paging in JQGridJQGrid 中的服务器端分页
【发布时间】:2013-09-25 08:07:07
【问题描述】:

我正在尝试在 JQGrid 中实现服务器端分页。任何机构都可以帮助我如何实现它。目前客户端在我的网格中运行良好,但想将其更改为服务器端。

【问题讨论】:

    标签: jqgrid-asp.net


    【解决方案1】:

    取自:http://yassershaikh.com/how-to-use-jqgrid-with-asp-net-mvc/

    如果您之前使用过 JqGrid,那么您无疑会熟悉传递给任何 ajax 请求的默认参数:“page”、“rows”、“sidx”和“sord”。这些参数分别对应当前页、每页记录、排序列、排序顺序。

    下面的截图,将帮助您更好地理解这一点。

    所以,为了解决这个问题,我准备了一个名为“JqGridObject”的类。

    public class JqGridObject  
    {  
        public string Page { get; set; }  
        public int PageSize { get; set; }  
        public string SortColumn { get; set; }  
        public string SortOrder { get; set; }  
        public List<Fruit> Data { get; set; }  
    }
    
    public class Fruit  
    {  
        public int Id { get; set; }  
        public string Name { get; set; }  
    } 
    

    使用这个 JqGridObject 类从控制器发送 json 数据

    public ActionResult GetJqGridData(string page, string rows, string sidx, string sord)
    {
        var jqGridData = new JqGridObject()
        {
            Data = GetSomeSampleData(),
            Page = page,
            PageSize = 3, // u can change this !
            SortColumn = sidx,
            SortOrder = sord
        };
    
        return Json(jqGridData, JsonRequestBehavior.AllowGet);
    }
    
    public List<Fruit> GetSomeSampleData()
    {
        return new List<Fruit>
        {
            new Fruit{Id = 1, Name = "Apple" },
            new Fruit{Id = 2, Name = "Melon" },
            new Fruit{Id = 3, Name = "Orange" },
            new Fruit{Id = 4, Name = "Grapes" },
            new Fruit{Id = 5, Name = "Pineapple" },
            new Fruit{Id = 6, Name = "Mango" },
            new Fruit{Id = 7, Name = "Bannana" },
            new Fruit{Id = 8, Name = "Cherry" }
        };
    }
    

    JqGrid jquery 调用。

    <script type="text/javascript">  
        $(document).ready(function () {
            $("#myGrid").jqGrid({
                url: '@Url.Action("GetJqGridData")',
                datatype: 'json',
                myType: 'GET',
                colNames: ['Id', 'Name'],
                colModel: [
                    { name: 'Id', index: 'Id' },
                    { name: 'Name', index: 'Name' }
                ],
                jsonReader: {
                    root: 'Data',
                    id: 'id',
                    repeatitems: false
                },
                pager: $('#myPager'),
                rowNum: 5,
                rowList: [2, 5, 10],
                width: 600,
                viewrecords: true,
                caption: 'Jqgrid MVC Tutorial'
            });
        });
    </script>
    
    <table id="myGrid"></table>  
    <div id="myPager"></div>  
    

    【讨论】:

    • 我的问题是当我单击 JQGrid 上的下一页时,我在处理程序处收到 Page = 1(我在第 1 页)而不是 2。我将如何获得被调用的确切页面值而不是上一页
    • @Yasser :很好的答案,但请你回答 Rohit 的问题?我也有同样的问题。
    【解决方案2】:

    我在 jqgrid 中看到了许多服务器端分页选项,但没有一个能有效满足我们的要求。

    我所做的是将 LIMIT :startLimit, :endLimit 放入查询字符串中。

    根据记录启用和禁用 nextPager 和 prevPager。

    假设我想为每个页面显示 5 条记录,

    var startLimit=0;
    var endLimit=5;
    

    当用户点击“NEXT”时,

    $("#next_pager").click(function () {
        startLimit =  startLimit+ endLimit;
        // here comes your AJAX call with passing two parameter(startLimit,endLimit)
    });
    

    当用户点击“上一个”时,

    $("#prev_pager").click(function (){
        if  (startLimit == 0)
        {
            $("#prev_pager").addClass("ui-state-disabled"); //disable previous pager icon
        }
        else
        {
            startLimit =  startLimit - endLimit;
        }
    });  
    

    更改页码:

    初始化一个变量:var pageInputValue=1;

    当用户点击“NEXT”时,

    $(".ui-pg-input").val(eval(parseInt(pageInputValue)+1));
    pageInputValue = eval(parseInt(pageInputValue)+1);
    

    当用户点击“上一个”时,

    $(".ui-pg-input").val(eval(parseInt(pageInputValue)-1));
    pageInputValue = eval(parseInt(pageInputValue)-1);
    

    要更改查看记录@右下键:

    if(eval(startLimit+endLimit) > result)
    {
        $(".ui-paging-info").text("View "+eval(startLimit+1) +" - "+result+" of "+result);
    }
    else
    {
        $(".ui-paging-info").text("View "+eval(startLimit+1) +" - "+eval(startLimit+endLimit)+" of "+result);
    }
    

    如果你觉得它有用,就让它发挥作用。

    【讨论】:

      猜你喜欢
      • 2015-09-07
      • 2014-05-17
      • 1970-01-01
      • 2010-10-31
      • 2011-06-16
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多