文档章节

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

文文1
 文文1
发布于 2015/04/11 14:15
字数 878
阅读 18
收藏 0

在未使用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);
		}
	}
}


© 著作权归作者所有

共有 人打赏支持
文文1
粉丝 21
博文 363
码字总数 118735
作品 0
长沙
程序员
私信 提问
jquery easyui 常见问题解决

/清空指定表单中的内容,参数为目标form的id注:在使用Jquery EasyUI的弹出窗口录入新增内容时,每次打开必须清空上次输入的历史数据,此时通常采用的方法是对每个输入组件进行置空操作:$("#...

乌鸦FB
2012/03/27
0
0
关于EasyUI多选,easyui datagrid 分页并保持checkbox选中状态

最近在使用EasyUI制作一个多选的功能,查找了很多资料,有几个说的不是很全,所以就尝试去写,今天终于弄出来了,就把完整的代码 贴出来,部门也是参照前人所说: 第一步:JSP页面 ①在data-...

RookieFang
2016/12/24
612
0
easyui 获取数据表格中选中行的数据 Get selected row data from...

http://www.easyui.net/2010/06/easyui-tutorial-get-selected-row-data-from-datagrid/ http://easyui.btboys.com/api/ easyui api http://www.iteye.com/problems/47234 jquery easyUI dat......

功夫panda
2012/02/23
0
0
jQuery easyUI 的问题

这是主页面:当第一次点击Bom管理时:第二次点击Bom管理:下图是每次Bom打开就会从复出现,不知道怎么回事啊!! 源码如下:点击管理调用下面的方法:这是第一种实现方案:出现这种问题,希望...

pengcheng_1024
2013/01/22
1K
1
lucene框架全文检索搜索引擎方案

搜索引擎技术方案 搜索引擎方案 功能需求背景: ----有搜索引擎需求 功能需求 提高查询效率,关键词全文检索。 不需要访问多次数据库,只能一次数据库查询。 准确关键词全文检索。 由于查询功...

RobertZhou
08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

小白带你认识netty(三)之NioEventLoop的线程(或者reactor线程)启动(一)

在第一章中,我们看关于NioEventLoopGroup的初始化,我们知道了NioEventLoopGroup对象中有一组EventLoop数组,并且数组中的每个EventLoop对象都对应一个线程FastThreadLocalThread,那么这个...

天空小小
今天
3
0
PHP动态扩展Redis模块

查看已有模块 [root@test-a ~]# /usr/local/php/bin/php -m[PHP Modules]bz2Core...zlib[Zend Modules] 下载包,解压,生成configure文件 [root@test-a ~]# cd /usr/local/src/[ro......

野雪球
今天
4
0
在Ignite中使用线性回归算法

在本系列前面的文章中,简单介绍了一下Ignite的机器学习网格,下面会趁热打铁,结合一些示例,深入介绍Ignite支持的一些机器学习算法。 如果要找合适的数据集,会发现可用的有很多,但是对于...

李玉珏
今天
5
0
Mybatis应用学习——简单使用示例

1. 传统JDBC程序中存在的问题 1. 一个简单的JDBC程序示例: public class JDBCDemo {public static void main(String[] args) {Connection con=null;PreparedStatement statemen...

江左煤郎
今天
5
0
使用JavaScript编写iOS应用业务逻辑

JSAUIKitCocoa使你可以使用JavaScript编写对性能要求不高但可能变动性很大的iOS应用的业务逻辑部分,View组件、需要多线程支持的Model等则直接使用原生对象。 编写方式与React Native相似,但...

neal01
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部