jqGrid中不同datatype,selrow单选selarrrow多选不同的纠结

本文探讨了jqGrid插件中selrow和selarrrow参数的使用方法及在不同数据加载方式下的行为表现。详细介绍了单选或多选模式下如何获取选中行的ID,尤其是在客户端与服务器端数据加载的不同场景中的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之所以写这个主题的博客,是因为太纠结了,就是很简单的问题,但是就是搞不明白,虽然项目中功能没问题,但是这个问题,想了好半天,也没有结果,最后不了了之。

若有理解的,可以留下您的大名~

废话少说,直奔主题:

jqGrid是jquery的grid插件,前台主要应用这个js来实现grid表格,效果如下:


jqGrid其他的就不过多说了,在此说一下我的问题。

jqGrid中参数:option:selrow,selarrrow定义

selrow:This option is read only. Contain the id of the last selected row. If you sort or apply a pagging this options is set to null【这个参数是只读的,获取最后选中行的id,如果你排序或分页,这个参数设置为null,默认是null,并且不可更改】

selarrrow:This options is read only. Determines the currently selected rows when multiselect is set to true. This is one dimensional array and the values in the array correspond to the selected id's in the grid.【参数是只读的,当multiselect设置为true时,使用这个参数来获取目前选中行,她是数组形式,数组中的值就是表格中被选中id集合】

grid展示数据有两种形式:

一种:客户端自己访问,然后把访问到的data赋值给grid。另一种:grid直接访问server。

先说第一种:前几个模块都是使用第一种方式,也就是使用datatype为local形式,把访问到data以数组形式赋值给grid。其中不涉及到分页。

第一种:

$.ajax({
       url:"",
       success: function(msg){
       posData = eval(msg);
       $("#tblPosition").jqGrid('setGridParam', {
        datatype: 'local',
        data:posData
                }).trigger("reloadGrid");      
});

这种形式下,使用单选,selrow,获取最后一次选中行的id,这样获取这条记录:

var slt = $("#tblPosition").jqGrid('getGridParam','selrow'); 选中行的id

var row= $("#tblPosition").jqGrid('getRowData', slt); row就是选中行,以json形式的记录

alert(row.grid表格中的字段);


使用多选时,selarrow:获取的选中行的id's。这样的获取这条记录的某一个字段时,如下:

var slt = $("#tblPosition").jqGrid('getGridParam','selarrrow');

for(var i=0; i<slt.length; i++){
var row=$("#tblPosition").jqGrid('getRowData', slt[i]);

alert(row.grid表格中的字段);
}

第二种:jqgrid直接访问server,其中用到分页【因为后几个模板数据最少是几十万条数据】

			$("#templatemappingList").jqGrid({
				url: path + "/rcp/rml/getAllTemplateMaping.do",
				datatype:"json",
				colNames:tagArray,
				pager:"#pager",
				rownumbers:true,
				rowNum:15,
				rowList:[10,15,20],
				multiselect:true,
				colModel:[
				   //省略
				   ],
				  jsonReader : {  
					       root:"rows",  
					        page: "page",  
					        total: "total",  
					        records: "records",  
					        repeatitems: false,
				            id: "0"  
					   }
			});

这种形式下,使用单选,selrow时使用如上:var slt = $("#tblPosition").jqGrid('getGridParam','selrow'); 此时获取的slt不是行id,而是colModel中第一个的值【无论是显示还是hidden】


使用多选selarrrow时使用依然如上:var slt = $("#tblPosition").jqGrid('getGridParam','selarrrow');此时获取的不是行id的数组,而是colModel中第一个值数组【无论是显示还是hidden】

程序中恰巧第一个是主键,所以一直没有问题

同时,官网demo中,有第二个例子,因colModel中第一个是数值型,和行不太容易区分,隐隐约约感觉到和我的一样,但是不敢太确定。官网上是使用php,也不是html文件形式,若单个文件,可以更改其js,进行测试。但是这个没有测试。

目前我使用两种形式的grid,也算历程经验。但是我觉得,selrow、selarrrow应该是一致的,但是我项目中效果是如上。有相同经历的或有经验的,请留下您宝贵的指导(*^__^*)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值