侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 87226 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

easyui-datagrid记录checkbox选择状态

2023-11-21 星期二 / 0 评论 / 0 点赞 / 2 阅读 / 11683 字

需求: (1) 分页:即发送开始元素的索引(startNumber)和每页显示多少信息(pageSize)到后台,后台使用类似limit的函数查出数据后以json格式返回 (2) 记录checkbox

需求:

(1) 分页:即发送开始元素的索引(startNumber)和每页显示多少信息(pageSize)到后台,后台使用类似limit的函数查出数据后以json格式返回

(2) 记录checkbox的选择状态(第一页选择了A,翻到第二页,回到第一页,A还是选中状态),点击"导出"按钮,后台将选中的每一行导出为excel ( 导出功能是需要知道哪些行被选中,哪些行没被选中的 )

(3) 点击"全选"按钮,所有行都被选中

 

datagrid的配置项里面

frozenColumns:[[                {field:'checkbox_',checkbox:true},                {field:'Cedcode',title:'社会统一信用代码',width:120,align:'center'},              ]], 

这样field名为checkbox_的这一列就会为checkbox

在实际应用中发现,翻页的时候,已选择checkbox不会被记录。也就是说,我在第一页选中了1,点击下一页,然后回到第一页,1还是未选择状态。

所以考虑用一个数组存放选中元素的ID,选中某一行时,就将这一行的ID放在数组中,当返回上一页的时候,遍历页面中的每一行,如果某一行的id在数组里面,那么就更新其为选中状态。"导出"时,将ID数组传到后台即可。

但是对于"全选"功能,点击"全选"按钮,所有的行都被选中,但当总数据量(total)上万的时候,不可能把上万的数据ID都放在数组里面,所以考虑增加一个标志位

var isSelectAll = false;

翻页的时候只要isSelectAll = true,就将该页所有的行的checkbox为选中状态,"导出"功能时,不但将数组传到后台,还将isSelectAll标志位传到后台。后台判断如果isSelectAll=true,那么就没数组什么事了,全查出来就行。

但是用户点击了"全选",然后又取消了某一行,怎么整?见下图 

所以最终是这个样子解决的

定义两个全局变量,isSelectAll记录当前是否为全选状态,当非全选时,idArray记录勾选行的id,当全选时,idArray记录未被勾选行的id

 

效果:

部分前台代码:

HTML

<script src="easyui/js/jquery.min.js"></script><script src="easyui/js/jquery.easyui.min.js"></script><link href="easyui/css/manner.css" rel="stylesheet"><link href="easyui/css/icon.css" rel="stylesheet"><link href="easyui/css/easyui.css" rel="stylesheet"><table id="EnterNList" class="easyui-datagrid" style="height: 400px;" data-options="pagination:true,rownumbers:true,pageSize:10,pageList:[10,15,20]"><!-- data-options里面的参数也可以在js里面写 -->				<thead>					<tr>						<th field="checkbox_" width="150" align="center" checkbox="true"></th>                        <th field="id" width="80" align="center" hidden="true" ></th>						<th field="Aag" width="150" align="center">分析角度</th>						<th field="YM" width="80" align="center">分析年月</th>						<th field="Enum" width="120" align="center">企业数量(个)</th>						<th field="detail" id="dataOption" width="80" align="center" formatter="formatOpt">操作</th>					</tr>				</thead></table>

部分Javascript 

// 请求参数var detailsInfo = {    // 查询参数	analysisPoint : null,	analysisTime : null,    // 记录"全选"状态和数据id    isSelectAll = false,    idArray : [],}$(function(){    // datagrid进行初始化配置	configDatagrid();});/** * datagrid发送请求的一个封装 * @returns */function sendQueryRequest(obj){	$.ajax({		type:"POST",		url:"./BEnterNum_Detail_Analysis",		data:{			analysisPoint:obj.analysisPoint,			analysisTime:obj.analysisTime,    		start:obj.start,    		size:obj.pageSize		},		datatype:"json",		success:function(data){			if(!obj.successCallback)				return;			obj.successCallback(data);		},		error:function(){			if(!obj.errorCallback)				return;			obj.errorCallback();		}	});}function formatOpt(val,row,index){	return '<a href="javascript:void(0)" name="opera" class="editcls" onclick="javascript:alert("查询详情");">查询详情</a>';}/** * "搜索" 按钮点击后的触发函数 * @returns */function search(aTag){	// 分析角度	detailsInfo.analysisPoint = $(aTag).parent().text();	// 分析时间	detailsInfo.analysisTime = $(aTag).parent().prev().text();		// 查询分页数据给datageid	sendQueryRequest({		start:1,		pageSize:10,		successCallback:function(data){			var queryJson = jQuery.parseJSON(data);			// datagrid显示内容			$('#buildingList').datagrid('loadData',queryJson);		},		errorCallback:function(){			$.messager.alert('Ajax Request Error!');		}	});	}/** * datagrid配置信息初始化 * @returns */function configDatagrid(){	$("#buildingList").datagrid({		toolbar:[{			text:'全选',			id:'btn_excel_select',			iconCls:'icon-select',			handler:function(){				$('div.datagrid-toolbar a').eq(0).hide();				$('div.datagrid-toolbar a').eq(1).show();                // 是否全选标志位				isSelectAll = true;				var rows = $("#buildingList").datagrid("getRows");				for(var i=0;i<rows.length;i++){						$('#buildingList').datagrid('selectRow',i);				}				detailsInfo.idArray = [];     	   	}		},{			text:'取消全选',     	   	id:'btn_excel_notselect',     	   	iconCls:'icon-select',     	   	handler:function(){     	   		$('div.datagrid-toolbar a').eq(1).hide();     	   		$('div.datagrid-toolbar a').eq(0).show();     	   		// 是否全选标志位     	   		isSelectAll = false;     	   		$('#buildingList').datagrid('clearSelections');				detailsInfo.idArray = [];     	   	}		},{			text:'导出',        	id:'btn_excel_out',        	iconCls:'icon-out',        	handler:function(){        		excelOutput();        	}		}],		onLoadSuccess:function(data) {			// 隐藏表头的全选checkbox			$("#buildingList").parent().find("div .datagrid-header-check").children("input[type=/"checkbox/"]").eq(0).attr("style", "display:none;");			// 隐藏"取消全选"  显示"全选"			$('div.datagrid-toolbar a').eq(1).hide();	    	$('div.datagrid-toolbar a').eq(0).show();		},		onCheck:function(index, data){			var row = $('#buildingList').datagrid('getData').rows[index];        	var Sco=row.id;        	// 如果此时是全选状态,那么取消记录未勾选的条目        	if(isSelectAll){        		if(!($.inArray(Sco,detailsInfo.idArray) == -1))        		{            		var index = $.inArray(Sco,detailsInfo.idArray);            		detailsInfo.idArray.splice(index,1);        		}        	}        	// 如果此时是非全选状态,那么记录勾选条目的id        	if(!isSelectAll){        		if($.inArray(Sco,detailsInfo.idArray) == -1)	        	{        			detailsInfo.idArray.push(Sco);	        	}        	}		},		onUncheck:function(index, data){			var row = $('#buildingList').datagrid('getData').rows[index];        	var Sco=row.id;        	// 如果此时是全选状态,那么记录取消勾选的条目        	if(isSelectAll){        		if($.inArray(Sco,detailsInfo.idArray) == -1)	        	{        			detailsInfo.idArray.push(Sco);	        	}        	}        	// 如果此时是非全选状态,那么取消记录勾选的条目        	if(!isSelectAll){        		if(!($.inArray(Sco,detailsInfo.idArray) == -1))        		{            		var index = $.inArray(Sco,detailsInfo.idArray);            		detailsInfo.idArray.splice(index,1);        		}        	}		}	});    // datagrid的分页处理配置	var pageObject = $('#buildingList').datagrid('getPager');	$(pageObject).pagination({		beforePageText:'第',  		afterPageText:'页  共{pages}页',  		displayMsg:'当前显示{from} - {to}  条记录  共{total} 条记录',  		onSelectPage:function (pageNo, pageSize){  			var start = (pageNo - 1) * pageSize + 1;             var end = start + pageSize - 1;            // 发送请求            sendQueryRequest({            	start:start,            	pageSize:pageSize,            	successCallback:function(data){                	$('#buildingList').datagrid('loadData',$.parseJSON(data));                  	$('#buildingList').datagrid('clearSelections');                    // 翻页后处理每一行的勾选情况          			rowAddSelections();    				var rowNumbers = $('.datagrid-cell-rownumber');                    $(rowNumbers).each(function(index){     	                var row = parseInt($(rowNumbers[index]).html()) + parseInt( start - 1 );     	                $(rowNumbers[index]).html("");     	                $(rowNumbers[index]).html(row);                    });            	},                errorCallback:function(){            		$.messager.alert('Ajax Request Error!');            	}            });  		},  		// 在触发onChangePageSize事件时,会同时触发onSelectPage事件  		onChangePageSize:function(pageSize){}	});}/** * datagrid翻页后给已选中行添加selected属性 * @returns */ function rowAddSelections(){	var rows = $("#buildingList").datagrid("getRows");	// 如果当前是全选状态,若某一行id不存在于idArray中,那么这一行会被勾选	if(isSelectAll){		for(var i=0;i<rows.length;i++){			if($.inArray(rows[i].id,detailsInfo.idArray) == -1)				$('#buildingList').datagrid('selectRow',i);		}    // 如果当前是非全选状态,若某一行id存在于idArray中,那么这一行会被选中	}else{		for(var i=0;i<rows.length;i++){			if($.inArray(rows[i].id,detailsInfo.idArray) != -1)				$('#buildingList').datagrid('selectRow',i);		}	}}/** * "导出" 按钮点击事件 导出为EXCEL并下载 * @returns */function excelOutput(){	$.messager.confirm("操作提示", "您确定要执行操作吗?", function (data) {		if (!data) {              return;        }		// 如果非全选状态 且idArray为空 或者 全选状态且idArray为满,那么提示用户		if(detailsInfo.idArray.length==0 && !isSelectAll){			$.messager.alert('提示','请选择要导出的信息');			return;		}		showProcess(true,'温馨提示','正在导出数据...');		var ids = detailsInfo.idArray.toString();		$.ajax({        	type:"POST",        	url:'./OutData',        	data:{        		analysisPoint : detailsInfo.analysisPoint,        		analysisTime : detailsInfo.analysisTime,        		isSelectAll : isSelectAll,        		ids : ids,        	},        	datatype: "json",        	success: function(data){        		showProcess(false);        		if (data.success) {                	window.location.href = "SessionFileExport?fileType=excelFile";                } else {                	$.messager.alert("操作提示", "操作失败!原因:" + data.failReason,"error");                }            },			error: function(){				$.messager.alert("操作提示", "操作失败!","error");            }        });	});}/** * 进度条显示 * @returns */function showProcess(isShow,title,msg){	if(!isShow){		$.messager.progress('close');		return;	}	var win=$.messager.progress({		title:title,		msg:msg	});}

 

广告 广告

评论区