jqGrid复选框未保存

时间:2014-10-21 15:17:50

标签: jquery checkbox jqgrid

我的jqGrid包含一个包含复选框的列。我注意到当用户切换复选框时,jqGrid实际上并未将该行置于编辑模式。因此,当用户单击“保存”按钮时,不会保存复选框的新值。

这是jgGrid中复选框的默认行为吗?使jqGrid保存复选框值的最佳方法是什么?

这是jqGrid代码:

var myGrid = jQuery("#myGrid");

myGrid.jqGrid({
    editurl: 'UpdateData',
    datatype: function (postdata) {
        //some code
    },
    height: "450",
    footerrow: false,
    userDataOnFooter: false,
    autowidth: true,
    viewrecords: true,
    rowNum: 100,
    rowList: [25, 50, 100, 200, 300, 400, 500, 1000],
    sortname: 'SomeId',
    pager: '#footer',
    caption: "",
    colNames: ['Field1', 'Field2'],
    colModel: [
        { name: 'Col1', index: 'Col1', hidden: false, editable: true, sortable: true, search: true },
        { name: 'MyCheckBox', index: 'MyCheckBox', hidden: false, editable: true, edittype: 'checkbox', editoptions: { value: "True:False" }, formatter: "checkbox", formatoptions: { disabled: false }, search: true }
    ],
    onSelectRow: function (index) {
        myGrid.jqGrid('editRow', index, true);
    }
});

myGrid.jqGrid('navGrid', '#footer',
    { edit: false, add: false, del: false, search: false },
    { closeAfterAdd: true }, // use default settings for edit
    { closeAfterAdd: true, left: ((document.body.clientWidth / 2) - 100), top: ((document.body.clientHeight / 2) - 50) }, // use default settings for add
    { },  // delete instead that del:false we need this
    { multipleSearch: false }, // enable the advanced searching
    { closeOnEscape: true} /* allow the view dialog to be closed when user press ESC key*/
);

myGrid.jqGrid('navButtonAdd', '#footer',
{
    buttonicon: "none",
    caption: "Save",
    onClickButton: function () {
        //save the currently selected row
    }
})

我正在考虑使用jQuery来附加"更改"每个复选框的处理程序,当用户单击复选框时,该行将该行置于编辑模式。虽然看起来像黑客,但我不确定如何正确识别网格中的复选框列(我的示例只显示一个复选框,但网格实际上有两个)。

jqGrid是否支持比此更好的复选框行为?

1 个答案:

答案 0 :(得分:2)

在我看来,您现在了解自己,formatter: "checkbox"使用内联编辑的初始假设(如果使用选项formatoptions: { disabled: false }进行初始化)是错误的。 jqGrid支持树独立编辑模式:单元格编辑,内联编辑和表单编辑。

格式化只是显示输入数据值的表单。例如,可以将01(或truefalse)值显示为YesNo或选中按钮或未经检查或作为两个不同的图像或作为绿色和红色或...的单元格。格式化程序的目标是构建HTML片段,将其放置在相应列的单元格中。

特别是在使用formatter: "checkbox", formatoptions: { disabled: false }的情况下,应该实现click句柄,这将在需要更改复选框状态时进行一些附加操作。在我看来,这种行为的最佳实现可以使用beforeSelectRow回调来编写。为The demo创建的the answer显示了在使用datatype: "local"时可以执行的操作。在这种情况下,有内部参数_indexdata来保存数据。如果您使用另一个datatype值,则有许多实现选项。例如,您可以执行几乎相同的操作,但在自定义数组或对象中保存已更改的复选框状态。我建议您阅读the answerthis one以获取更多信息。

关于您发布的代码的一些常见说明。如果您在内部使用datatype,我严格建议您避免使用jQuery.ajax定义为函数。它是局部错误的起源。 jqGrid提供了许多选项,允许您自定义jQuery.ajax,在使用datatype: "json"datatype: "xml"时生成jqGrid。有beforeProcessing回调,ajaxGridOptions选项,jsonReader可以使用jsonmap中的函数(请参阅here),colModel属性,功能也是如此。我建议你改用这些功能。

此外,我建议您在网格中添加gridview: true(请参阅here)和autoencode: true选项,并从index和属性中删除不需要的colModel属性默认值 hidden: falsesortable: truesearch: true。严格建议在输入数据中填充id(rowid),如果列中已包含唯一ID值,则使用key: true作为某些列。