标注idField:'id'在多行删除的前后区别

在未使用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:'id'在多行删除的前后区别

如果设定了idField的情况下,其余所有代码没变,仍旧是删除最前面五条记录:

改动JS代码:

var index = $('#_list').datagrid('getRowIndex',node[i].id);//以row来获取行号index

会发现和以row行记录来获得index一致,此时第一种的删除方法出错。

结果显示:

标注idField:'id'在多行删除的前后区别

总结:

(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]);//选中最后被删除的记录的下一条记录
}

结果显示:

标注idField:'id'在多行删除的前后区别

另外一种更简单的方法:

   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);
		}
	}
}


你可能感兴趣的:(标注idField:'id'在多行删除的前后区别)