You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带可编辑单元格的多选网格:二次编辑后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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:10:16