【问题标题】:Keep checked state of checkbox in custom formatted column when sorting jqGrid对jqGrid进行排序时,在自定义格式列中保持复选框的选中状态
【发布时间】:2012-06-19 13:50:43
【问题描述】:

我有一个加载一次 jqgrid,它使用自定义格式化程序来显示 bool 值的复选框,当单击保存按钮时保留这些值。但是,无论何时单击排序,都不会保留所有复选框的选中状态。

jQuery("#list2").jqGrid({
    url:myurl,
    datatype: "json",
    loadonce: true,
    colNames:['Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'],
    colModel:[
        {name:'id',index:'id', width:55},
        {name:'isChecked',index:'isChecked', width:90, formatter:chkFmatter},
        {name:'name',index:'name asc, invdate', width:100},
        {name:'amount',index:'amount', width:80, align:"right"},
        {name:'tax',index:'tax', width:80, align:"right"},      
        {name:'total',index:'total', width:80,align:"right"},       
        {name:'note',index:'note', width:150, sortable:false}       
    ],
    rowNum:10,
    rowList:[10,20,30],
    pager: '#pager2',
    sortname: 'id',
    viewrecords: true,
    sortorder: "desc",
    caption:"JSON Example"
});
jQuery("#list2").jqGrid('navGrid','#pager2',{edit:false,add:false,del:false});

function chkFmatter(cellvalue, options, rowObject) {
    // do something here to format column
    return new_format_value
}

我是否可以保留在排序、分页等时单击了哪些复选框?

【问题讨论】:

  • 我很困惑,我在您的 jqGrid 示例代码中没有看到自定义格式化程序?
  • 当然,这并没有错。我只是想了解您是如何解决问题的,以便我(或其他任何人)可以应用这些知识:)

标签: jqgrid


【解决方案1】:

这是因为绑定到网格的数据没有被更新,所以任何新的请求(分页、排序等)都会反映属性绑定到的原始状态。您最好的选择是复选框的状态随时更改以更新实际数据以反映这一点。

您可以使用getGridParam检索绑定到网格的数据:

var data = $('#' + gridid).jqGrid('getGridParam', 'data');

然后使用您的 rowid、列名和值来更新数据对象:

data[row - 1][columnname] = value;

【讨论】:

  • 这真是太棒了——那么你之后会打电话给setGridParam 来更新网格数据吗?另外,您是从哪个事件中调用它的?
  • 但是排序如何知道使用value 而不是data 中的先前值?或者现在我看代码,我想它不需要因为$t.p[pName]直接返回......
  • 在来回分页或排序(服务器端)时,状态不会恢复到服务器数据的状态吗?我建议处理“afterSaveCell”,以便为每次编辑向服务器发送更新 - 如果没有,请保存您编辑的行并显示它们,例如在用户单击保存按钮时您将提交所有编辑的网格旁边- 您的用户会明白网格正在显示服务器数据,而您的侧视图正在显示待处理的更新
  • @fbfcn 当我使用单选按钮单击事件将单元格更改更新为本地网格数据对象时,它按预期显示,直到导航到下一页并返回本地数据,然后它恢复为最初加载的状态。除了data[row - 1][columnname] = value; 之外,还有什么可以真正“保存”对本地数据数组的更改吗?
  • 是的,这是真的,数据被预加载一次,loadonce:true,只要页面向前或向后移动,它就会恢复到最初加载的数据。这里已经很晚了,如果你想看的话,我明天会放代码。谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-06-14
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 2020-10-06
  • 2016-12-19
  • 2017-12-25
相关资源
最近更新 更多