JQGrid, изменить цвет фона строки в зависимости от условия - PullRequest
25 голосов
/ 11 октября 2010

У меня есть следующая jqgrid, которая использует тему jquery ui, импортированную на мою главную страницу.

  $("#shippingscheduletable").jqGrid({
            url: $("#shippingscheduleurl").attr('href'),
            datatype: 'json',
            mtype: 'GET',
            altRows: true,
            colNames: ['Dealer', 'Model', 'Invoice', 'Date', 'PO', 'Serial', 'Status', 'City', 'State', 'IsPaid', 'Promo', 'Carrier', 'Int Notes', 'Ord Notes', 'Terms'],
            colModel: [
     { name: 'Company', index: 'id', width: 125, align: 'left' },
     { name: 'Model', index: 'Model', width: 50, align: 'left' },
     { name: 'Invoice', index: 'Invoice', width: 50, align: 'left' },
     { name: 'Date', index: 'OrderDate', width: 60, align: 'left' },
     { name: 'Po', index: 'PONum', width: 75, align: 'left' },
     { name: 'Serial', index: 'Serial', width: 50, align: 'left' },
     { name: 'Status', index: 'OrderStatus', width: 70, align: 'left' },
     { name: 'City', index: 'City', width: 100, align: 'left' },
     { name: 'State', index: 'State', width: 30, align: 'left' },
     { name: 'IsPaid', index: 'IsPaid', width: 30, align: 'left' },
     { name: 'Promo', index: 'Promo', width: 50, align: 'left' },
     { name: 'Carrier', index: 'Carrier', width: 80, align: 'left' },
     { name: 'InternalNotes', index: 'InternalNotes', width: 110, align: 'left' },
     { name: 'OrderNotes', index: 'OrderNotes', width: 110, align: 'left' },
     { name: 'Terms', index: 'Terms', width: 60, align: 'left' }
     ],
            pager: jQuery("#shippingschedulepager"),
            rowNum: 100,
            rowList: [100, 150, 200],
            sortname: 'Company',
            sortorder: "asc",
            viewrecords: true,
            height: '700px',
            multiselect: true
        });

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

Ответы [ 9 ]

16 голосов
/ 11 октября 2010

Просто для справки других здесь приведен полный код. Я также обнаружил, что мне нужно добавить еще одно условие, чтобы изменить цвет строки. Мне нужно было менять цвет строки только тогда, когда оплачено поле true, и когда статус завершен. Этот код показывает это. Также исправлена ​​проблема потери форматирования при перезагрузке сетки при сортировке столбцов. Я надеюсь, что это помогает кому-то еще.

    var rowsToColor = [];
    jQuery(function () {
        $("#shippingscheduletable").jqGrid({
            url: $("#shippingscheduleurl").attr('href'),
            datatype: 'json',
            mtype: 'GET',
            altRows: true,
            colNames: ['Dealer', 'Model', 'Invoice', 'Date', 'PO', 'Serial', 'Status', 'City', 'State', 'Paid', 'Promo', 'Carrier', 'Int Notes', 'Ord Notes', 'Terms'],
            colModel: [
     { name: 'Company', index: 'id', width: 125, align: 'left' },
     { name: 'Model', index: 'Model', width: 50, align: 'left' },
     { name: 'Invoice', index: 'Invoice', width: 50, align: 'left' },
     { name: 'Date', index: 'OrderDate', width: 60, align: 'left' },
     { name: 'Po', index: 'PONum', width: 75, align: 'left' },
     { name: 'Serial', index: 'Serial', width: 50, align: 'left' },
     { name: 'Status', index: 'OrderStatus', width: 70, align: 'left' },
     { name: 'City', index: 'City', width: 100, align: 'left' },
     { name: 'State', index: 'State', width: 30, align: 'left' },
     { name: 'Paid', index: 'IsPaid', width: 30, align: 'left', formatter: rowColorFormatter },
     { name: 'Promo', index: 'Promo', width: 50, align: 'left' },
     { name: 'Carrier', index: 'Carrier', width: 80, align: 'left' },
     { name: 'InternalNotes', index: 'InternalNotes', width: 110, align: 'left' },
     { name: 'OrderNotes', index: 'OrderNotes', width: 110, align: 'left' },
     { name: 'Terms', index: 'Terms', width: 60, align: 'left' }
     ],
            pager: jQuery("#shippingschedulepager"),
            rowNum: 100,
            rowList: [100, 150, 200],
            sortname: 'Company',
            sortorder: "asc",
            viewrecords: true,
            height: '700px',
            multiselect: true,
            gridComplete: function () {
                for (var i = 0; i < rowsToColor.length; i++) {
                    var status = $("#" + rowsToColor[i]).find("td").eq(7).html();
                    if (status == "Complete") {
                        $("#" + rowsToColor[i]).find("td").css("background-color", "green");
                        $("#" + rowsToColor[i]).find("td").css("color", "silver");
                    }
                }
             }
        });
    });

    function rowColorFormatter(cellValue, options, rowObject) {
        if (cellValue == "True")
            rowsToColor[rowsToColor.length] = options.rowId;
        return cellValue;
    }

поэтому функция форматирования добавляет идентификатор строки, который необходимо изменить, в массив, если оплаченное значение равно true, затем, когда сетка завершена, она изменяет CSS для каждого идентификатора строки, после того как она проверяет значение 7-го числа где мой статус найден, чтобы убедиться, что он завершен.

12 голосов
/ 19 января 2013

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

gridComplete: function()
{
    var rows = $("#"+mygrid).getDataIDs(); 
    for (var i = 0; i < rows.length; i++)
    {
        var status = $("#"+mygrid).getCell(rows[i],"status");
        if(status == "Completed")
        {
            $("#"+mygrid).jqGrid('setRowData',rows[i],false, {  color:'white',weightfont:'bold',background:'blue'});            
        }
    }
}
7 голосов
/ 11 октября 2010

использовать функцию форматирования:

как в этом посте

http://www.trirand.net/forum/default.aspx?g=posts&m=2678

4 голосов
/ 04 июня 2012

Как насчет через Jquery Css.
См. Код ниже, чтобы установить строки с неактивным статусом на красный.Имя сетки jqTable.

setGridColors: function() {
    $('td[title="Inactive"]', '#jqTable').each(function(i) {
        $(this).parent().css('background', 'red');
    });
}
4 голосов
/ 04 февраля 2011

Это указало мне правильное направление, но не совсем помогло с пейджингом. Если это кому-нибудь поможет, следующее сработало и не использует форматер colModel.

Мне нужно было применить красный цвет к отдельным ячейкам с выдающимися количествами (имя: os) в 9-м тд на моей сетке. Тип данных был json, и я использовал функцию loadComplete, у которой в качестве параметра используется ответ данных:

loadComplete: function(data) {
    $.each(data.rows,function(i,item){
        if(data.rows[i].os>0){
            $("#" + data.rows[i].id).find("td").eq(9).css("color", "red");
        }
    });
},

Избавился от проблем с подкачкой, которые у меня были, и работает над сортировкой и т. Д.

В качестве отступления - я обнаружил, что функция loadComplete полезна для добавления динамической информации, такой как изменение текстов заголовков для результатов поиска - вероятно, это очевидно для многих, но я новичок в json, jquery и jqgrid

1 голос
/ 01 мая 2014

Я использовал простой селектор JQuery и применил мои нужные стили.Все, что вам нужно, это uid (rowid) строки, к которой вы хотите применить стили.

if (!xCostCenter[i].saveSuccessful)
{  
    $("#row" + _updatedRowIDs[i] + "jqxgrid > div").css({ "background-color": "rgb(246, 119, 119)" });
}

В моем случае я хотел изменить цвет строк, которые не были сохранены, чтобы изменить на красный цвет,Чтобы удалить цвет, просто выполните следующее.

$("#contenttablejqxgrid > div > div").css({ "background-color": "" });

надеюсь, это кому-нибудь поможет.

1 голос
/ 23 ноября 2012

Чтобы нарисовать сетку, используйте функцию ниже. Например: PintarRowGrilla('#gridPreSeleccion', 3, 9, '#8FD9F1'); 9 -> количество столбцов вашей сетки:

function PintarRowGrilla(idGrilla, idrow, nrocolumnas, color)
{
    while(nrocolumnas > 0)
    {
        nrocolumnas--;
        jQuery(idGrilla).setCell(idrow, nrocolumnas, '', {
            'background-color': color
        });
    }
}
0 голосов
/ 09 мая 2018

Используйте событие строки JQGrid jqGridRowAttr для установки любого форматирования.Подробнее см. http://www.trirand.com/blog/?page_id=393/help/rowattr-triger-after-setrowdata Примеры шагов для установки фона:

Сначала установите свой собственный CSS для условного форматирования inline или ваш файл CSS.Например (см. Результат в браузере Chrome)

.bg-danger {
  background-color: #f2dede;
}
.bg-danger td{ background-color : #ff0000ad; }

Добавить событие строки сразу после ColModel

rowattr: function (rd) {

                    if (rd.FileExists == 'no') // your condition here
                    {
                        return { "class": "bg-danger" };
                    }

                }
0 голосов
/ 16 января 2015
 loadComplete: function() {
    var ids = $(this).jqGrid("getDataIDs"), l = ids.length, i, rowid, status;
        for (i = 0; i < l; i++) {
        rowid = ids[i];
    // get data from some column "ColumnName"
        varColumnName= $(this).jqGrid("getCell", rowid, "ColumnName");
    // or get data from some 
    //var rowData = $(this).jqGrid("getRowData', rowid);

    // now you can set css on the row with some
        if (varColumnName=== condition) {
            $('#' + $.jgrid.jqID(rowid)).addClass('myAltRowClass');
         }
    }
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...