JqGrid Custom Formatter Set Cell не будет работать с options.rowId

Я просмотрел все сообщения, наконец, заставил setCell работать с жестко закодированными значениями, но не используя options.rowId.

 function StatusFormatter(cellvalue, options, rowObject) {
    if (cellvalue == 'C'){
        jQuery("#list").setCell(options.rowId , 'SOORDLINE', '', { color: 'red' });
        jQuery("#list").setCell("[2.000]", 'SOORDLINE', '', { color: 'red' });
        jQuery("#list").setCell('[2.000]', 'SOREQDATE', '', { color: 'red' });
        jQuery("#list").setCell(options.rowId, 'SOPRICE', '', { color: 'red' });
    }
    return cellvalue;
    };  

ПЕРВАЯ и ПОСЛЕДНЯЯ строки не работают, но 2 с жестко заданным rowId работают. Я проверил, что возвращается в option.rowId, и они такие же, как и жестко закодированные значения (конечно, просто разные в зависимости от строки. Что мне не хватает? Пожалуйста, помогите. Я не вижу никакой разницы между строками или значениями.

ОТРЕДАКТИРОВАНО-

Я попробовал ответ, и, похоже, это то, что мне нужно. Я попробовал следующее

      { name: 'SOORDLINE', index: 'SOORDLINE', width: 25, search: false ,celattr: function () { return ' style="color: red"'; }
},

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


person D-S    schedule 20.12.2011    source источник


Ответы (1)


Извините, но вы используете настраиваемый модуль форматирования в absolute неправильный путь. Цель пользовательского средства форматирования — предоставить фрагмент HTML для заполнения содержимого ячеек в соответствующем столбце. Таким образом, StatusFormatter будет вызываться до создания строки с идентификатором, равным options.rowId. Кроме того, для повышения производительности обычно используется gridview: true. в случае, если все содержимое сетки (все тело сетки) сначала будет построено как строка и только после этого будет помещено в тело сетки за одну операцию. Это повышает производительность, потому что после размещения любого элемента веб-браузеру приходится пересчитывать положение всех остальных элементов на странице.

Если вы хотите установить цвет текста в ячейке SOORDLINE, вы должны вместо этого cellattr:

celattr: function () { return ' style="color: red"'; }

celattr также можно использовать в форме celattr: function (rowId, cellValue, rawObject) {...}, и вы можете проверить свойство rawObject, которое представляет значения для любого столбца и возвращает стиль ячейки на основе значения ячейки.

В качестве альтернативы вы можете перечислить строки внутри loadComplete и установить стиль для элемента <tr> вместо того, чтобы устанавливать одинаковые стили для каждой строки. См. ответ в качестве примера.

person Oleg    schedule 20.12.2011
comment
ПРИМЕЧАНИЕ. Я заставил его работать, в вашем примере было только «l» в cellattr вместо 2, я просмотрел исходный код в примере и увидел разницу. - person D-S; 21.12.2011
comment
Это решение, похоже, не работает, когда группировка включена. И когда вы сортируете, атрибут цвета в этом примере исчезает. - person D-S; 21.12.2011
comment
Я исправил проблему с цветом, отключив loadonce. Думаю, атрибуты не переносятся, когда строки перемешиваются, и celattr не реализуется повторно. просто предположение. - person D-S; 21.12.2011
comment
@D-S: Проблема в том, что вы включили слишком мало информации в текст своего вопроса. Вы всегда должны включать определение jqGrid. Не менее полных colModel и значения параметров datatype и loadonce. В случае использования пользовательского средства форматирования вы всегда должны включать тестовые данные JSON или XML, которые вы используете. Имея информацию, я мог бы показать вам, как использовать cellattr и пользовательский formatter в вашем случае. Он будет работать вместе с loadonce: true - person Oleg; 21.12.2011