代码如下:
问题:
例如:在jqgrid有分页的情况下,选择非第一页时(比如第2页的某个列),对列进行排序,jqgrid回传的url的当前页码会变成是第一页而非我当前选择的第二页,如何解决?
 $("#selectinfo").show();
            var times,url,bt,cl,tp;
            times = new Date().getTime();
            url="/ServletBase.ashx?";
                       
            jQuery("#list2").trigger("reloadGrid");
jQuery("#list2").jqGrid({
    url:url,
                datatype: "xml",
mtype: 'GET',
width:document.body.clientWidth,
    colNames:['片区编号','片区名称', '状态', '备注','操作'],
    colModel:[
    {name:'areaid',index:'areaid',align:'center'},
    {name:'areaname',index:'areaname',align:'center'},
    {name:'status',index:'status',align:'center',formatter:'checkbox'},
    {name:'note',index:'note',align:'center'},
    {name:'operator',index:'operator',align:'center',width:120,sortable:false}
    ],    
    rowNum:2,
    pager: $('#pager2'),
    sortname: '片区编号',
    viewrecords: true,
    sortname:"areaid",
    sortorder: "asc",
    pginput:true,
    caption:"",
    sortable: true,
    drag: true,
    gridview: true,
    rownumbers: true,
    rownumWidth: 50,
    multiselect: false,
    loadComplete: function()
    {
            var ids = jQuery("#list2").jqGrid('getDataIDs');
            for(var i=0;i < ids.length;i++)
            {
            cl = ids[i];
            tp =$("#list2").getCell(cl,3);             
            bt="<input type='button' value='编辑' id='edit"+cl+"' />";             
            if (tp.toUpperCase()=="yes".toUpperCase())
            {
                bt+="<input type='button' value='禁用' id='status"+cl+"'onclick=\"editstatus('"+$("#list2").getCell(cl,1)+"','"+tp+"','"+cl+"')\" />";
            }
            else
            {
                bt+="<input type='button' value='启用' id='status"+cl+"' onclick=\"editstatus('"+$("#list2").getCell(cl,1)+"','"+tp+"','"+cl+"')\" />";
            }             
            jQuery("#list2").jqGrid('setRowData',ids[i],{operator:bt});
            }
            },
            onSortCol: function (index, colindex, sortorder)
            {
                //列排序事件
                alert('onSortCol index=>'+index +" colindex=>"+colindex +"  sortorder=>"+sortorder);             },
            loadError : function(xhr,st,err) 
            {
                alert("Type: "+st+"; Response: "+ xhr.status + " "+xhr.statusText);
                //$("#tblMasterMessage").html("Type: "+st+"; Response: "+ xhr.status + " "+xhr.statusText);
                } });
$("#list2").resetSelection();

解决方案 »

  1.   

    因为jqgrid在分页的情况下不支持客户端排序,所有的排序都是要提交到服务器端进行排序的。
    有时候客户要求的就是希望实现当前按照指定列客户端排序的效果(所以不希望返回第一页)。
      

  2.   

    尝试注册onHeaderClick事件不生效。
    $("#selectinfo").show();
                var times,url,bt,cl,tp;
                times = new Date().getTime();
                url="/ServletBase.ashx?";
                url=url+"action=findarealist&logtime="+encodeURI(times)+"&areaid="+encodeURI($("#areaid").val())+"&areaname="+encodeURI($("#areaname").val())+"&status="+encodeURI($("#Status").val());
                            
                jQuery("#list2").trigger("reloadGrid");
    jQuery("#list2").jqGrid({
        url:url,
                    datatype: "xml",
    mtype: 'GET',
    width:document.body.clientWidth,
        colNames:['片区编号','片区名称', '状态', '备注','操作'],
        colModel:[
        {name:'areaid',index:'areaid',align:'center',sortable:false},
        {name:'areaname',index:'areaname',align:'center',sortable:true},
        {name:'status',index:'status',align:'center',formatter:'checkbox',sortable:false},
        {name:'note',index:'note',align:'center',sortable:false},
        {name:'operator',index:'operator',align:'center',width:120,sortable:false}
        ],    
        rowNum:2,
        pager: $('#pager2'),
        sortname: '片区编号',
        viewrecords: true,
        sortname:"areaid",
        sortorder: "asc",
        pginput:true,
        caption:"",
        sortable: true,
        drag: true,
        gridview: true,
        rownumbers: true,
        rownumWidth: 50,
        multiselect: false,
        loadComplete: function()
        {
                var ids = jQuery("#list2").jqGrid('getDataIDs');
                for(var i=0;i < ids.length;i++)
                {
                cl = ids[i];
                tp =$("#list2").getCell(cl,3);             
                bt="<input type='button' value='编辑' id='edit"+cl+"' />";             
                if (tp.toUpperCase()=="yes".toUpperCase())
                {
                    bt+="<input type='button' value='禁用' id='status"+cl+"'onclick=\"editstatus('"+$("#list2").getCell(cl,1)+"','"+tp+"','"+cl+"')\" />";
                }
                else
                {
                    bt+="<input type='button' value='启用' id='status"+cl+"' onclick=\"editstatus('"+$("#list2").getCell(cl,1)+"','"+tp+"','"+cl+"')\" />";
                }             
                jQuery("#list2").jqGrid('setRowData',ids[i],{operator:bt});
                }
                },
                onSortCol: function (index, colindex, sortorder)
                {
                    //列排序事件
                    alert('onSortCol index=>'+index +" colindex=>"+colindex +"  sortorder=>"+sortorder);             },
                loadError : function(xhr,st,err) 
                {
                    alert("Type: "+st+"; Response: "+ xhr.status + " "+xhr.statusText);
                    //$("#tblMasterMessage").html("Type: "+st+"; Response: "+ xhr.status + " "+xhr.statusText);
                    },
                    onHeaderClick:function()
                    {
                        alert("111");
                    } });
      

  3.   

    自己解决了用全局变量解决了排序后翻页的问题。
    通过
                    onPaging:function()
                    {
                        dd=jQuery('#list2').jqGrid('getGridParam','page');
                    }
                onSortCol: function (index, colindex, sortorder)
                {
                    //列排序事件
                    jQuery("#list2").jqGrid('setGridParam',{page:dd});
                }