带可编辑单元格的多选网格:二次编辑后setSelection失效问题咨询
解决jqGrid多选网格afterSaveCell再次编辑无法保持选中状态的问题
问题分析
首次编辑单元格值大于0时行勾选正常,但再次编辑同一单元格时选中状态丢失,核心原因是:单元格编辑结束后,jqGrid会重置行的选中状态,且内部维护的选中行ID集合(selarrrow)没有被同步更新,导致视觉和内部状态不一致。
修复后的代码
afterSaveCell: function (rowid, name, val, iRow, iCol) { var grid = $("#" + subgrid_table_id); var parsedVal = parseFloat(val); if (!isNaN(parsedVal) && parsedVal > 0) { // 强制设置行选中,禁用onSelectRow事件触发 grid.jqGrid('setSelection', rowid, false); // 手动添加选中样式,避免编辑后样式被清除 grid.find("#" + rowid).addClass("ui-state-highlight"); // 更新jqGrid内部选中ID集合,确保状态一致 var selectedIds = grid.jqGrid('getGridParam', 'selarrrow'); if (!selectedIds.includes(rowid)) { selectedIds.push(rowid); grid.jqGrid('setGridParam', { selarrrow: selectedIds }); } // 设置Review单元格标记 grid.jqGrid('setCell', rowid, 'Review', "True"); } else { // 可选:值不大于0时取消选中及标记 grid.jqGrid('resetSelection', rowid); grid.jqGrid('setCell', rowid, 'Review', "False"); } }
关键修复点
- 同步内部选中集合:直接操作
selarrrow参数,确保jqGrid内部记录的选中行ID和实际选中状态一致,避免后续操作时状态丢失。 - 强制维护选中样式:编辑结束后jqGrid可能移除行的选中样式,手动添加
ui-state-highlight保证视觉效果。 - 增加数值校验:用
isNaN判断避免非数值输入导致的逻辑错误。
内容的提问来源于stack exchange,提问作者BDave
相关产品推荐
相关产品推荐

