jqGrid复选框列

时间:2011-12-21 13:23:23

标签: jquery jquery-ui jquery-plugins jqgrid jqgrid-asp.net

我有一个相当复杂的网格,其中两列格式化为复选框。这些列定义如下:

{ name: 'Alert_A', index: 'Alert_A', width: 22, align: 'center', sortable: false,
    formatter: CheckBoxFormatter, editable: true, edittype: 'checkbox', editoptions: {value: "True:False"}, 
    formatoptions: {disabled: false}, classes: "Alert_A" },
{ name: 'Alert_B', index: 'Alert_B', width: 22, align: 'center', sortable: false,
    formatter: CheckBoxFormatter, editable: true, edittype: 'checkbox', editoptions: { value: "True:False" },
    formatoptions: {disabled: false}, classes: "Alert_B" }

需要自定义格式化程序CheckBoxFormatter,因为我需要根据一些自定义规则设置每个复选框的禁用属性,因此我借用了原生的“复选框”格式化程序并添加了我的自定义规则。

我还有一个外部html按钮元素,当我点击它时,我需要执行一些代码,具体取决于复选框选择的组合。我的代码如下所示:

$('#btnAlert').button().click(function (event) {
    event.preventDefault();
    var dashboardID = '#<%=dashboard.ClientID %>';
    doWork(dashboardID);
});

以及稍后的doWork函数

var keys = $(dashboardID).getDataIDs();
for (var i = 0; i < keys.length; i++) {
    var rowData = $(dashboardID).getRowData(keys[i]);
    ...
    var reminderA = $(rowData.Alert_A).is(":checked");
    var reminderB = $(rowData.Alert_B).is(":checked");
    ...
    ... other application logic here
}

不幸的是,我遇到的事实是reminderAreminderB变量的值并不反映复选框的确切状态,而是始终反映其初始值的状态(例如,当它们有已被jqgrid插件加载)。换句话说,当用户单击网格中的复选框时,这些值不会更新。

这是实现我的结果的正确方法还是我必须使用不同的代码?有什么帮助吗?

非常感谢!

2 个答案:

答案 0 :(得分:5)

您可以很容易地解释您遇到的问题。您使用启用的复选框(formatoptions:{disabled: false}),因此用户可以更改复选框的状态。问题是您使用自定义CheckBoxFormatter而不是原始的“复选框”格式化程序。您使用的方法getRowData尝试调用未定义的unformatter 。因此,该复选框的值将使用$(cellval).text()(请参阅the source code of unformatter),并且始终为空。

因此,如果您定义自定义格式化程序并使用getRowData等方法,则必须定义unformatter

在您的情况下,您根本不需要使用自定义格式化程序。您需要的只是为某些复选框定义disabled="disabled"属性取决于某些自定义规则。所以你只想定义属性的格式化程序cellattr(请参阅herehere使用示例和my original feature request)非常简单易用,而且正是您所需要的。例如,它可能类似于以下

cellattr: function (rowId, value, rawObject) {
    if (rawObject.deliveryStatus !== "sent") {
        return '';
    } else {
        return ' disabled="disabled"';
    }
}

如果你可以使用原始的复选框格式化器和unformatter,所有这些都可以正常工作。

答案 1 :(得分:0)

我想你有一个在document.ready中绑定'#btnAlert'和doWork()的脚本,我遇到了这样的问题,并且必须在初始化jqgrid后将绑定功能与内联脚本放在一起。请告诉我它是否有效!