jqGrid onCellSelect和afterSaveCell实现列表单元格可编辑
页面:
xml代码:
<button name="savebill" caption="保存" /> <button name="examine" caption="审核" /> <button name="noexamine" caption="反审核" /> <button name="topay" caption="转薪资" /> <grid name="mealSum" sorterItems="" cellEdit="true"> <field name="personId" label="职员" /> <field name="number" label="编码" /> <!--描述--> <field name="year" label="年份" /> <field name="month" label="月份" /> <field name="BreakfastTimes" label="早餐次数" editable="true" /> <field name="BreakfastCost" label="早餐费用" /> <field name="lunchTimes" label="午餐次数" editable="true" /> <field name="lunchCost" label="午餐费用" /> <field name="DinnerTimes" label="晚餐次数" editable="true" /> <field name="DinnerCost" label="晚餐费用" /> <field name="CostSum" label="费用合计" editable="true" /> <field name="mealstate" label="状态" /> </grid>
js代码:
initalizeDOM : function () { var _self=this; shr.MonthMealSumResultList.superClass.initalizeDOM.call(this);//shr中MonthMealSumResultList文件 // 强制隐藏工具栏 $("#addNew").hide();// 隐藏创建 $("#delete").hide();// 隐藏删除 _self.dataInsertMonitor(); }, onCellSelect: function (rowid, colIndex, cellcontent, e) { var _self = this; _self._initSelectedRowIdAndSelectRowData(); //状态为已审核/已转薪资不可编辑 var row = $("#grid").jqGrid("getRowData", rowid); if (row.mealstate == "1"||row.mealstate == "2") { $("#grid").jqGrid('setCell', rowid, "BreakfastTimes","", 'not-editable-cell'); $("#grid").jqGrid('setCell', rowid, "lunchTimes","", 'not-editable-cell'); $("#grid").jqGrid('setCell', rowid, "DinnerTimes","", 'not-editable-cell'); $("#grid").jqGrid('setCell', rowid, "CostSum","", 'not-editable-cell'); } // 选择的是选择框 if (colIndex == 0) { //_self._addRowIdToSelectedRowId(rowid); var checked = $(_self.gridId).jqGrid('isChecked', rowid); f (!checked) { var index = $.inArray(rowid, _self.selectedRowId); _self.selectedRowId.splice(index, 1); //_self.selectedRowData.splice(index, 1); } return; } }, //月餐费计算和,实现单元格列表可编辑 dataInsertMonitor: function () { var self = this; $("#grid").jqGrid("option",{ afterSaveCell :function(rowid,cellname,value,iRow,iCol,oldValue){ var meal = 0; if(cellname == "BreakfastTimes"){ meal = value*4; $("#grid").jqGrid("setCell",rowid,"BreakfastCost",meal,{color:'red'},"",true,true); } if(cellname == "lunchTimes"){ meal = value*15; $("#grid").jqGrid("setCell",rowid,"lunchCost",meal,{color:'red'},"",true,true); } if(cellname == "DinnerTimes"){ meal = value*6; $("#grid").jqGrid("setCell",rowid,"DinnerCost",meal,{color:'red'},"",true,true); } var breakCost = $("#grid").jqGrid("getCell",rowid,"BreakfastCost"); var lunchCost = $("#grid").jqGrid("getCell",rowid,"lunchCost"); var dinnerCost = $("#grid").jqGrid("getCell",rowid,"DinnerCost"); var sum = breakCost*1+lunchCost*1+dinnerCost*1; $("#grid").jqGrid("setCell",rowid,"CostSum",sum,{color:'red'},"",true,true); } }); //保存按钮,调后台保存 savebillAction:function(){ var _self = this; var bills = []; var $grid = $(this.gridId); var selectedIds = $grid.jqGrid("getSelectedRows"); if (selectedIds.length > 0) { if (typeof fieldName == 'undefined' || !fieldName) { fieldName = this.getBillIdFieldName(); } var id; for (var i = 0, length = selectedIds.length; i < length; i++) { id = $grid.jqGrid("getCell", selectedIds[i], fieldName); if (id && id.length > 0) { var a = $('#grid').jqGrid('getRowRealData',id); bills.push(a); if (a.mealstate == "1") { shr.showWarning({ message: a["personId.name"]+" 的员工状态为已审核" }); return; } if (a.mealstate == "2") { shr.showWarning({ message: a["personId.name"]+" 的员工状态为已转薪资" }); return; } } } var databill = shr.toJSON(bills); shr.showConfirm('您确认要保存吗?', function(){ top.Messenger().hideAll(); _self.remoteCall({ method:"savebills", param:{data:databill}, success:function(data){ if(data.result == "error"){ shr.showError({message:data.summary}) }else{ shr.showSuccess({ message: "保存成功!" }); window.location.reload(); } } }); }); } if (selectedIds.length <= 0) { shr.showWarning({ message: "请先选中表格中的数据!" }); }; }, }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术