jqGrid 复选框列

2024-04-16

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

{ 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
}

不幸的是,我正在经历这样一个事实:reminderA and reminderB变量并不反映复选框的确切状态,而是始终反映其初始值的状态(例如,当它们被 jqgrid 插件加载时)。换句话说,当用户单击网格中的复选框时,这些值不会更新。

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

多谢!


你遇到的问题可以很容易地解释。您使用启用的复选框(formatoptions:{disabled: false}),因此用户可以更改复选框的状态。问题是你使用你的自定义CheckBoxFormatter而不是原来的“复选框”格式化程序。方法getRowData你用哪个尝试打电话unformatter你哪个没有定义的。所以复选框的值将被使用$(cellval).text() (see 取消格式化程序的源代码 https://github.com/tonytomov/jqGrid/blob/master/js/jquery.fmatter.js#L527)并且将始终为空。

因此,如果您定义自定义格式化程序并使用类似的方法getRowData你必须定义取消格式化程序 http://www.trirand.com/jqgridwiki/doku.php?id=wiki:custom_formatter#unformatting too.

在您的情况下,您根本不需要使用自定义格式化程序。你需要的只是定义disabled="disabled"某些复选框的属性取决于某些自定义规则。所以您只想定义属性的格式化程序. The cellattr http://www.trirand.com/jqgridwiki/doku.php?id=wiki:colmodel_options (see here https://stackoverflow.com/a/6509041/315935 and here https://stackoverflow.com/a/6048865/315935使用示例和我最初的功能请求 http://www.trirand.com/blog/?page_id=393/feature-request/custom-cell-tooltips-used-title-property-of-colmodel-as-the-function/)使用起来非常简单,而且正是您所需要的。例如,它可能类似于以下内容

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

在这种情况下你可以使用原本的复选框格式和未格式化,一切都将正常工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jqGrid 复选框列 的相关文章