jqGrid - редактировать только определенные строки для редактируемого столбца - PullRequest
3 голосов
/ 19 мая 2010

Можно ли отключить редактирование в jqGrid для определенных ячеек в столбце, помеченном как редактируемый?

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

Ответы [ 2 ]

7 голосов
/ 19 мая 2010

Я рекомендую вам использовать так называемое «встроенное редактирование» для редактирования строк. Самое большое преимущество этого метода в том, что он очень интуитивно понятен и пользователю. Вы можете увидеть, как это работает, на демонстрационной странице http://trirand.com/blog/jqgrid/jqgrid.html. Выберите в этой демонстрации «Редактирование строки», а затем «Использование событий» или «Типы ввода» в левой части дерева. С помощью этого метода вы можете реализовать любую пользовательскую проверку, разрешено ли редактировать выбранную строку или нет внутри дескриптора события onSelectRow или ondblClickRow. Если вы разрешаете редактирование, тогда вы вызываете editRow метод jqGrid. Этот метод создает элементы управления вводом для всех редактируемых столбцов, и пользователь может изменять значения строк естественным образом. Изменения будут сохранены, если пользователь нажал клавишу «Ввод» или отменил клавишу «Esc».

Лично я предпочитаю реализовывать вызов метода editRow внутри обработчика событий ondblClickRow. Таким образом, пользователь может продолжить выбор строк, как обычно, и может использовать двойной щелчок для редактирования строки. Псевдокод будет выглядеть следующим образом:

var lastSel = -1;
var isRowEditable = function (id) {
    // implement your criteria here 
    return true;
};
var grid = jQuery('#list').jqGrid({
    // ...
    ondblClickRow: function(id, ri, ci) {
        if (isRowEditable(id)) {
            // edit the row and save it on press "enter" key
            grid.jqGrid('editRow',id,true);
        }
    },
    onSelectRow: function(id) {
        if (id && id !== lastSel) {
            // cancel editing of the previous selected row if it was in editing state.
            // jqGrid hold intern savedRow array inside of jqGrid object,
            // so it is safe to call restoreRow method with any id parameter
            // if jqGrid not in editing state
            grid.jqGrid('restoreRow',lastSel);
            lastSel = id;
        }
    },
    pager: '#pager'
}).jqGrid('navGrid','#pager',{edit:false});
2 голосов
/ 12 ноября 2010

Вы можете сделать это логически. У вас должны быть критерии для ячеек, чтобы некоторые ячейки можно было редактировать, а некоторые - нет.

Я реализовал это по строкам.

Когда вы создаете XML для jqgrid, присвойте какой-нибудь идентификатор каждой строке.

На основе этих идентификаторов вы можете сделать ячейки этих строк редактируемыми или нередактируемыми, используя методы jqgrid

Ниже приведен метод beforeEditCell:

beforeEditCell: function(rowid, cellname, value, iRow, iCol) {
   // here identify row based on rowid
   // if the row should not be editable than simply make the cells noneditable using
   editCell(iRow, iCol, false);
   jQuery(gridid).jqGrid("restoreCell",iRow,iCol);

}

Вы можете и дальше реализовывать себя.

Надеюсь, мое предложение поможет вам. :)

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