我的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是否支持比此更好的复选框行为?
答案 0 :(得分:2)
在我看来,您现在了解自己,formatter: "checkbox"
使用内联编辑的初始假设(如果使用选项formatoptions: { disabled: false }
进行初始化)是错误的。 jqGrid支持树独立编辑模式:单元格编辑,内联编辑和表单编辑。
格式化只是显示输入数据值的表单。例如,可以将0
和1
(或true
和false
)值显示为Yes
和No
或选中按钮或未经检查或作为两个不同的图像或作为绿色和红色或...的单元格。格式化程序的目标是构建HTML片段,将其放置在相应列的单元格中。
特别是在使用formatter: "checkbox", formatoptions: { disabled: false }
的情况下,应该实现click
句柄,这将在需要更改复选框状态时进行一些附加操作。在我看来,这种行为的最佳实现可以使用beforeSelectRow
回调来编写。为The demo创建的the answer显示了在使用datatype: "local"
时可以执行的操作。在这种情况下,有内部参数_index
和data
来保存数据。如果您使用另一个datatype
值,则有许多实现选项。例如,您可以执行几乎相同的操作,但在自定义数组或对象中保存已更改的复选框状态。我建议您阅读the answer和this 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: false
,sortable: true
,search: true
。严格建议在输入数据中填充id
(rowid),如果列中已包含唯一ID值,则使用key: true
作为某些列。