之前编辑那一行 停留在那一行, 是以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;
}
}