Пользовательский форматер для редактируемых ячеек не работает должным образом при выборе этой ячейки в jqgrid - PullRequest
0 голосов
/ 25 марта 2012

Я использую пользовательский форматер для отображения данных ячейки, которые являются редактируемыми ячейками. Если я выбираю эту ячейку и выбираю любую другую ячейку, данные ячейки исчезают, а другие ячейки становятся недоступными для редактирования. Если я использую неформатор, он также не работает ,

мой код:

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

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

В вашем случае выбор нестандартного форматера кажется мне неправильным.Проблема заключается в том, что пользовательский форматер будет вызываться не только во время начальной загрузки сетки, но может быть вызван позже.Поэтому мне кажется, что использование 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 обратного вызова.В приведенном ниже примере я заполнил все специфичные для TreeGrid свойства в beforeProcessing:

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

Модифицированная демонстрация, которую вы найдете здесь :

enter image description here

ОБНОВЛЕНО : я изменил в демонстрационной версии локальное редактирование ячейки на локальное встроенное редактирование , поскольку редактирование ячеек не поддерживает работу с TreeGrid.

0 голосов
/ 26 марта 2012

Используемый вами json имеет несколько ошибок.Попробуй ниже.

{"list":{"id":16731,"no":"1","name":"resources","employeeID":116,"employeeName":"lakshmi","assignPercent":50.5},"employeeID":118,"employeeName":"abc","assignPercent":50.5}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...