Jquery jqGrid复选框未保存
我有一个jqGrid,它有一个包含复选框的列。我注意到,当用户切换复选框时,jqGrid实际上不会将行置于编辑模式。因此,当用户单击save按钮时,复选框的新值不会被保存 这是jgGrid中复选框的默认行为吗?让jqGrid保存复选框值的最佳方法是什么 以下是jqGrid代码:Jquery jqGrid复选框未保存,jquery,checkbox,jqgrid,Jquery,Checkbox,Jqgrid,我有一个jqGrid,它有一个包含复选框的列。我注意到,当用户切换复选框时,jqGrid实际上不会将行置于编辑模式。因此,当用户单击save按钮时,复选框的新值不会被保存 这是jgGrid中复选框的默认行为吗?让jqGrid保存复选框值的最佳方法是什么 以下是jqGrid代码: var myGrid = jQuery("#myGrid"); myGrid.jqGrid({ editurl: 'UpdateData', datatype: function (postdata)
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支持比这更好的复选框行为吗?我觉得您现在明白了,您最初的假设是,如果使用选项
formatoptions:{disabled:false}
初始化,那么格式化程序:“checkbox”
使用内联编辑是错误的。jqGrid支持独立于树的编辑模式:单元编辑、内联编辑和表单编辑
格式化只是显示输入数据值的表单。例如,可以将0
和1
(或true
和false
)值显示为Yes
和No
,或显示为选中按钮或未选中按钮,或显示为两个不同的图像,或显示为绿色和红色的单元格或。。。所以格式化程序的目标是构造HTML片段,这些片段将被放置在相应列的单元格中
特别是在使用formatter:“checkbox”的情况下,formattoptions:{disabled:false}
应该实现单击
句柄,该句柄将执行一些附加操作,在更改复选框状态时,您需要执行这些操作。在我看来,这种行为的最佳实现可以使用beforeselectionRow
callback编写。创建用于显示在使用数据类型时可以执行的操作:“本地”
。在这种情况下,存在保存数据的内部参数\u index
和data
。如果使用另一个数据类型
值,则有许多实现选项。例如,您可以执行几乎相同的操作,但在自定义数组或对象中保存复选框的更改状态。我建议您阅读和了解更多信息
关于您发布的代码的一些常见评论。如果您在内部使用jQuery.ajax
,我强烈建议您避免使用定义为函数的datatype
。这是局部错误的根源。jqGrid提供了许多选项,允许您自定义jQuery.ajax
,在使用datatype:“json”
或datatype:“xml”
的情况下,jqGrid本身就是这样。有beforeProcessing
回调,ajaxGridOptions
选项,jsonReader
可以使用函数(请参阅),colModel
中的jsonmap
属性,也可以是函数等等。我建议您改用这些功能
此外,我建议您在网格中添加
gridview:true
(请参阅)和autoencode:true
选项,并从colModel
中删除不需要的索引
属性和默认值为隐藏:false
,可排序:true
,搜索:true
。严格建议在输入数据中填写id
(rowid),或者在某些列中使用key:true
,如果该列已经包含唯一的id值。感谢您的详细和深思熟虑的回答。不幸的是,我没有足够的jqGrid经验来理解你所说的一切。此时,我可能只会使用formatoptions:{disabled:true}并强制用户在选中框之前将行置于编辑模式。如果选中该框本身可以将行置于编辑模式,那就太好了,但它显然不是这样工作的。@不客气!如果您在jqGrid中填充不确定的内容,那么删除格式选项:{disabled:true}
可能是最佳选择。在任何情况下,使用简单选项gridview:true、autoencode:true
都是不错的选择。您应该考虑删除异类<代码>数据类型:函数< />代码,使用标准<代码>数据类型>代码>值。是的,这是我继承的一个项目,我不确定为什么它会设置它的方式。数据类型函数在我看来总是很奇怪,所以你说这是个坏主意我并不感到奇怪。不幸的是,有几十个网格,它们都是这样工作的。也许有一天我会改变它。