1.使用方法
//取消所有的选中行
$("#grid").datagrid('clearSelections');
$("#grid").datagrid('clearChecked');
//获取所有选中行的信息
$("#grid").datagrid('getSelections');
$("#grid").datagrid('getChecked');
//取消要选中的行
$("#grid").datagrid('unselectRow',index);
$("#grid").datagrid('uncheckRow',index);
2.遇到的问题、原因分析和解决方法
(1)问题一:不能全部取消要取消的项
问题描述:在使用datagrid的时候,使用循环对选中项中不需要的项的取消,发现不能不需要的项不能全部被取消。
错误代码:
var rows = $("#grid").datagrid('getChecked'); //获取选中的行
var flag = true;
for(var i = 0; i < rows.length ; i++){
if(!!!rows[i].receive_grid && !!!rows[i].receive_user_id ){
if(flag){
flag = true;
}
}else {
flag = false;
//使用index索引进行查询,$("#grid").datagrid('getRowIndex', rows[i].id)使用id来查询索引
$("#grid").datagrid('uncheckRow', $("#grid").datagrid('getRowIndex', rows[i]));
}
错误原因分析:
使用$("#grid").datagrid('getChecked');
来获取的OBJ对象是动态的,进行一次循环修改后,$("#grid").datagrid('getChecked');
;获取到的对象就和之前不一样了,用$("#grid").datagrid('getRowIndex', rows[i]
也无法获取到正确的索引。
解决方法:
将$("#grid").datagrid('getChecked');
序列化成JSON.parse(JSON.stringify( $("#grid").datagrid('getChecked')));
这样能保证这个对象是不会改变,并使用$("#grid").datagrid('getRowIndex', rows[i].id)
用id来进行索引的获取,保证索引的正确性。
正确代码:
var rows = JSON.parse(JSON.stringify( $("#grid").datagrid('getChecked'))); //获取选中的行,进行序列化
var flag = true;
for(var i = 0; i < rows.length ; i++){
if(!!!rows[i].receive_grid && !!!rows[i].receive_user_id ){
if(flag){
flag = true;
}
}else {
flag = false;
//使用index索引进行查询,$("#grid").datagrid('getRowIndex', rows[i].id)使用id来查询索引
$("#grid").datagrid('uncheckRow', $("#grid").datagrid('getRowIndex', rows[i].id));
}