jqGrid treeGrid editRow и not-editable-cel - PullRequest
       7

jqGrid treeGrid editRow и not-editable-cel

0 голосов
/ 08 февраля 2012

У меня есть сетка с несколькими редактируемыми столбцами

colModel: [
    { 
        name: 'id',
        width: 1,
        hidden: true,
        key: true,
        resizable: false
    },
    {
        name: 'name',
        editable: true,
        sortable: false,
        resizable: false
    },
    {
        name: 'name2',
        editable: true,
        sortable: false,
        resizable: false
    },
    treeGrid: true,
    treeGridModel: 'adjacency',
    ExpandColumn: 'name',

По какой-то причине мне нужно иметь несколько нередактируемых ячеек в этих столбцах

    loadComplete: function() {
        var ids = grid.jqGrid('getDataIDs');

        for (var i=0;i<ids.length;i++) {
            var id=ids[i];
            var row_data = $(this).jqGrid('getRowData', id);

            if (row_data.zzz > 0) {
                if (row_data.zzz > 1) 
                    grid.jqGrid('setCell',id,'name2','','not-editable-cell');
                else
                ...
            }
            else {
                grid.jqGrid('setCell',id,'name','','not-editable-cell');
                ...
            }
        }
    }

Поэтому в некоторых строках есть обе ячейкиредактируемый (имя, имя2), только один (имя или имя2)

У меня нет проблем, если я использую editCell, но editRow не обращает внимания на класс не-редактируемой ячейки

Я решил эту проблему, отредактировав jquery.jqGrid.src.js. Я понимаю, что это очень плохой способ

$.jgrid.extend({
//Editing
    editRow : function(rowid,keys,oneditfunc,successfunc, url, extraparam, aftersavefunc,errorfunc, afterrestorefunc) {
.......
        return this.each(function(){
            var $t = this, nm, tmp, editable, cnt=0, focus=null, svr={}, ind,cm;
            if (!$t.grid ) { return; }
            ind = $($t).jqGrid("getInd",rowid,true);
            if( ind === false ) {return;}
            editable = $(ind).attr("editable") || "0";
            if (editable == "0" && !$(ind).hasClass("not-editable-row")) {
                cm = $t.p.colModel;
                $('td[role="gridcell"]',ind).each( function(i) {
///
                    if (!$(this).hasClass("not-editable-cell")) {
///
                    nm = cm[i].name;
                    var treeg = ($t.p.treeGrid===true && nm == $t.p.ExpandColumn) ? true : false;

Возможно ли решить эту проблему с помощью форматера?

1 Ответ

1 голос
/ 08 февраля 2012

Класс "not-editable-cell" действительно используется только при редактировании ячейки.Встроенное редактирование анализирует только вызов "not-editable-row".Вы можете изменить исходный код jqGrid, но у вас будут проблемы с сохранением ваших пользовательских изменений после выпуска новой версии jqGrid.Так что лучше всего разместить ваше предложение в форуме trirand .

В качестве обходного пути вы можете использовать трюк, который я описал здесь и здесь .Идея проста: вы можете временно изменить свойство editable на основе содержимого ячейки.Непосредственно после вызова метода editRow вы можете сбросить свойство editable, поскольку поля редактирования уже созданы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...