在未使用idField:'id' ,即以id来作为标记的时候,我们获取行索引index,必须以这条记录row来获取,可以使用一下方式来删除所有被勾选的记录:
function deleteObject(){
var node=$("#_list").datagrid("getChecked");
var arr = [];
if (node.length>0){
for(var i=0;i<node.length;i++){
var index = $('#_list').datagrid('getRowIndex',node[i]);//以row来获取行号index
$('#_list').datagrid('deleteRow',index);
$('#_list').datagrid('selectRow',index);
arr.push(index);
}
console.info(arr);
}
}
控制台显示:
如果设定了idField的情况下,其余所有代码没变,仍旧是删除最前面五条记录:
改动JS代码:
var index = $('#_list').datagrid('getRowIndex',node[i].id);//以row来获取行号index
会发现和以row行记录来获得index一致,此时第一种的删除方法出错。
结果显示:
总结:
(1)在没有设定idField的时候删除,貌似是删除一条记录后,再在新的datagrid数据中重新获得新的index行号,再进行删除,所以能够正确删除
(2)在设定了idField的时候,会发现索引是没有删除之前的行号,我们要做的就是模仿第一种删除方式来获得正确的行号来进行删除,所以先要获取没有删除之前所有被勾选的行记录的索引号,然后在循环删除,记得在删除一行之后,该行之后的被勾选的实际索引号相对于初始的索引号是-1的:
所以这么做:(注意(1)和(2)不能放一起,虽然看起来都是循环是一样的,但是在删除之后再去获得index行索引会出错)
1. 从前往后删除---需要考虑顺序问题
/**
* 删除数据表格的记录并更新数据表
*/
function deleteObject(){
var count=-1;//用来标记已经删除记录的次数,删除一次为0(对应被删除的第一条记录的实际索引号为index-0),删除两次为1(对应的第二条记录的实际索引号为index-1),
var node=$("#_list").datagrid("getChecked");
var arr = [];//用来放置为删除之前的所有被勾选的初始索引号
var arr1 = [];//用来放置每条要被删除的记录的初始索引号对应的减数
if (node.length>0){
for(var i=0;i<node.length;i++){
(1) var index = $('#_list').datagrid('getRowIndex',node[i].id);//根据id标识查索引
count++;
arr.push(index);
arr1.push(count);
}
for(var i=0;i<arr.length;i++){
(2) $('#_list').datagrid('deleteRow',arr[i]-arr1[i]);//根据实际索引号来删除记录
}
}
console.info(arr);
console.info(arr1);
$('#_list').datagrid('selectRow',arr[arr.length-1]-arr1[arr1.length-1]);//选中最后被删除的记录的下一条记录
}
结果显示:
另外一种更简单的方法:
2.从后往前删除---不需要考虑顺序问题
function deleteObject(){
var node=$("#_list").datagrid("getChecked");
var rows = $('#_list').datagrid('getRows');
var rowsLen = rows.length;
var nodeLen = node.length;
if (node.length>0)
{
for(var i=node.length-1;i>=0;i--)
{
var row=node[i];
var rowIndex=$("#_list").datagrid("getRowIndex",row);
if(i==nodeLen-1){//如果删除的是被勾选的最下面一条记录
if(rowsLen-1>rowIndex){//如果该记录不是最后一条
$('#_list').datagrid('clearSelections');//必须加上这样,否则如果被删除的行是最后一行,那么即使表面上已经没有选择的行,但是在利用datagrid("selectRow")的时候会发现得到的是被是删除的最后一行,所以先清除再选择
$("#_list").datagrid("selectRow",rowIndex+1);//选中被删除的最后一行的下一条记录
}
}
$("#_list").datagrid("deleteRow",rowIndex);
}
}
}