Как динамически изменить форматирование ячейки - PullRequest
0 голосов
/ 28 августа 2011

Я реализовал сетку данных, используя dojo, который обновляется каждые 5 секунд.Я использую следующий код для обновления сетки данных.

jsonStore.fetch({
         query: {id:'*'},
         onComplete: function(items, result){
         dojo.forEach(items, function(item){
             jsonStore.setValue(item, "time" , data.update[0].netchange);
.....

'data' - это новые данные, которые мне нужно установить в сетке, которая является объектом json, следующим образом

var data = {"update":[{...}]}

что янужно сделать, если netchage отрицательный, мне нужно установить цвет ячейки на красный.если netchange положительный, он должен быть зеленым.Поэтому мне нужен способ динамического изменения форматирования ячеек.Может кто-нибудь, пожалуйста, скажите мне, как это.заранее спасибо

grid4 = new dojox.grid.DataGrid({
            query : {
                Title : '*'
            },
            id : "grid",
            jsId : "grid",
            clientSort : true,
            rowSelector : '0px',
            structure : layout4
        }, document.createElement('div'));
        grid4.setStore(jsonStore);
        dojo.byId("gridContainer4").appendChild(grid4.domNode);

var layout4 = [ {
            field : 'time',
            name : 'time',
            width : '40px',
            formatter: geticon()
        }, {
            field : 'netchange',
            name : 'netchange',
            width : '30px'
        } ];

1 Ответ

5 голосов
/ 28 августа 2011

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

Вы не меняете ячейку formatter, вы меняете способ оформления ячейки .

Каждый раз, когда значение загружается в ячейку, вызывается средство форматирования. Кроме того, функция onStyleROw вызывается для строки, в которой находится ячейка.

Это означает, что у вас есть две опции для изменения цвета ячейки. Вы можете сделать это на основе ячейки или сделать так, чтобы ваш форматировщик сделал что-то простое, например, обернув значение <span>, имеющим другой цвет стиля. Я покажу вам оба.

Вот первое решение без изменения любого существующего кода сетки, и оно изменит всю строку, используя onStyleRow.

Решение 1 с использованием onStyleRow

Шаг 1. (Подключите onStyleRow)

dojo.connect (grid4, "onStyleRow", styleRowGridPayment);

Шаг 2. (Создайте свой styleRowGridPayment метод.)

var styleGridPayment = function(inRow) {
        if( null !== grid4.getItem( inRow.index ) ) {
            item = grid4.getItem( inRow.index );
            if( item.netchange < 0 ) {
                inRow.customStyles += "color:red;";
            } else {
                inRow.customStyles += "color:green;";
            }
         }
    }   

Это должно сделать это для использования onStyleRow.

Решение 2, с использованием форматера

В вашей декларации поля у вас будет

{
    field : 'netchange',
    name : 'netchange',
    width : '30px'
    formatter: formatNetchange
} 

Обратите внимание, что я добавил формат Netchange в качестве форматера.

Тогда вы просто создаете свой форматер.

formatNetchange = function(value){
     if(value < 0){
        color = "red";
     } else {
        color = "green";
     }
     return "<span style='color:" + color "'>" + value "</span>";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...