可编辑单元格的自定义格式化程序在jqgrid中选择该单元格时无法正常工作

我正在使用自定义格式化程序来显示可编辑单元格的单元格数据。如果我选​​择该单元格并选择任何其他单元格,则单元格数据正在消失,其他单元格也变得无法使用。如果我使用的是非格式化程序,它也无法正常工作。

我的代码是:

jQuery("#tree").jqGrid({ url:'json/jsonSamplePots.json', datatype: "json", mtype:'GET', colNames: ["id", "no.", "name"], colModel: [ {name:'id',width: 30, editable:false, align:"right",sortable:false, hidden: true, key: true}, {name:'no',width:80, editable:false, align:"left", sortable:true, sorttype:"int"}, {name:'name', width:150, editable:true, sortable:true, sorttype:"text",formatter:resourceFormatter}, ], rowNum:10, rowList:[10,20,30], treeGridModel:'adjacency', treeGrid: true, cellEdit: true, ExpandColumn:'name', cellsubmit : 'clientArray'}); resourceFormatter=function(cellvalue, options, rowObject) { var strResources=''; if( null != rowObject.name ) { $.each(rowObject.name,function(i,Assignment) { if(Assignment) { for(i=0;i<Assignment.length;i++) { if(i!=0) { strResources=strResources+","; } strResources=strResources+Assignment[i].employeeName+'['+Assignment[i].assignPercent+']'; } } }); } return strResources;} 

我的JSON是::

 { "list": [ { "id": 16731, "no": "1", "name": { "resources": [ { "employeeID": 103, "employeeName": "Gowri", "assignPercent": 100 }, { "employeeID": 108, "employeeName": "Paul", "assignPercent": 50 }, { "employeeID": 111, "employeeName": "Sarfaraz", "assignPercent": 50.5 } ] } } ]} 

在你的情况下, 自定义格式化程序的选择似乎我错了。 问题是自定义格式化程序不仅会在初始网格加载期间被调用,而且可以在以后调用。 所以在我看来jsonmap的用法更好:

 {name: 'name', width: 250, editable: true, jsonmap: function (obj) { var prop, name = obj.name, assignment, resource, values = [], i, n; for (prop in name) { if (name.hasOwnProperty(prop)) { assignment = name[prop]; if ($.isArray(assignment)) { for (i = 0, n = assignment.length; i < n; i++) { resource = assignment[i]; values.push(resource.employeeName + '[' + resource.assignPercent + ']'); } } } } return values.join(', '); }} 

您还必须定义jsonReader

 jsonReader: { repeatitems: false, root: "list" } 

此外,填充TreeGrid特定属性非常重要。 您可以填充beforeProcessing回调中的部分属性。 在下面的示例中,我填充了beforeProcessing所有TreeGrid特定属性:

 beforeProcessing: function (data) { var i, list = data.list, n, item; if ($.isArray(list)) { for (i = 0, n = list.length; i < n; i++) { item = list[i]; if (typeof item.level === "undefined") { item.level = 0; } if (typeof item.parent === "undefined") { item.parent = null; } if (typeof item.isLeaf === "undefined") { item.isLeaf = false; } if (typeof item.expanded === "undefined") { item.expanded = false; } if (typeof item.loaded === "undefined") { item.loaded = true; } } } } 

您在此处找到的修改过的演示:

在此处输入图像描述

更新 :我在演示中将本地单元格编辑更改为本地内联编辑,因为单元格编辑不支持使用TreeGrid。

你正在使用的json有几个错误。 试试以下。

 {"list":{"id":16731,"no":"1","name":"resources","employeeID":116,"employeeName":"lakshmi","assignPercent":50.5},"employeeID":118,"employeeName":"abc","assignPercent":50.5}