在非首页 编辑那一行 编辑后刷新页面 仍停留在那一行 的思路

 之前编辑那一行 停留在那一行, 是以sitekey来排序的(查询结果是固定,所以可以实现)

没有siteKey就以reportTitle的名称排序(因为reportTitle的名称会被修改,所以不会被固定), 
那就以主键 uuid 排序(mysql默认就是以主键排序,即使编辑,查询的结果也是固定的), 只要查询结果是固定的就可以编辑那一行,停留在那一行,你只需将当前页码pageNo传到后台datatable,查询定位到指定pageNo的页

此处是以order 和 modifytime两列排序, 编辑后,查询结果顺序会变, 唯一能做的就是停留在编辑所在的页, 你要将编辑后查询的list遍历,刚刚编辑那条记录所在的pageStart(即uuid相等,脚标i+1就是pageStart),在datatable里计算page=pageStart/pageSize,调用oTable.fnPageChange(parseInt(page));

datatable刪除后,停留在当前页(如果是当前页最后一条,需要判断 ret.list.length % 10==0 定位到页码减1的的那一页,否则,ding定位到传入的当前页)

datatable编辑后,停留在编辑的那条记录所在的页

js代码

function search(a) { //删除传入2
    var oTable = $("#tabledata").dataTable();
    var tableSetings=oTable.fnSettings();
    var paging_length=tableSetings._iDisplayLength;//当前每页显示多少
    var page_start=tableSetings._iDisplayStart;//当前页开始
    var page=(page_start / paging_length); //页数值是0 定位到第1页(页数值比页码小1)
    var pageDelete = null;
    if (a == 2) { //删除调用时将page传入,在controller判断是删除的search还是编辑的search,因为他们的成功回调返回值不一样
        pageDelete = page;
    }
    var id = $('#id').val();
    var reportTitle = $("#reportTitle").val();
    var beginDate = $("#beginDate").val();
    var  endDate= $("#endDate").val();
    var type = $("#type").val();
    var param={
        reportTitle:reportTitle,
        beginDate:beginDate,
        endDate:endDate,
        type:type,
        id:id,
        pageDelete:pageDelete
    };
    $.ajax({
        type: "POST",
        contentType: 'application/json; charset=UTF-8',
        dataType: "json",
        data:JSON.stringify(param),
        url: "getReportList",
        async: true,
        success: function (ret) {
            if (ret.reportList.length > 0) {
                if (ret.pageDelete != null && ret.pageDelete != '') {
                    $('#tabledata').dataTable().fnClearTable();   //将数据清除
                    $('#tabledata').dataTable().fnAddData(ret.reportList);
                    if (ret.reportList.length % paging_length ==0) { //10/10==0即页数值是0 定位到第1页(页数值比页码小1)
                        oTable.fnPageChange(parseInt(ret.pageDelete) -1);
                    }else {
                        oTable.fnPageChange(parseInt(ret.pageDelete));
                    }
                }else {
                    $('#tabledata').dataTable().fnClearTable();   //将数据清除
                    $('#tabledata').dataTable().fnAddData(ret.reportList);
                    oTable.fnPageChange(parseInt((ret.pageStart / paging_length)));
                }
            }else{
                $('#tabledata').dataTable().fnClearTable();
            }
        },
        error: function (ret) {
        }
    });
}

Controller代码:

@RequestMapping("/getReportList")
    @ResponseBody
    public HashMap<String, Object> getReportList(@RequestBody HashMap<String, Object> map) {
        ArrayList<ReportModel> list = reportService.getReportList(map);
        //遍历查找,刚刚编辑那条记录所在的pageStart,在datatable里计算page=pageStart/pageSize,调用oTable.fnPageChange(parseInt(page));
        int s = 0;
        for (int i = 0; i < list.size(); i++) {
            ReportModel reportModel =  list.get(i);
            if (map.get("id").toString().equals(reportModel.getId())) {
                s = i + 1;
                break;
            }

        }
        HashMap<String, Object> resultMap = new HashMap<>();
        Object pageDelete = map.get("pageDelete");
        if (pageDelete != null) {
            Integer page = Integer.valueOf(pageDelete.toString());
            resultMap.put("pageDelete", page);
            resultMap.put("reportList",list);
            return resultMap;
        }else {
            resultMap.put("pageStart", s);
            resultMap.put("reportList",list);
            return resultMap;
        }

    }

猜你喜欢

转载自blog.csdn.net/qq_29883183/article/details/81118290