JQGrid Grouping GroupText форматирование и модификация

У меня есть сетка, в которой реализована группировка, но я хотел бы расширить детали, отображаемые в области groupText:. В идеале я мог бы взять данные об этой группировке и отобразить в этой строке группы с именем группы (значение по умолчанию {0}).

Другими словами, я пытаюсь достичь способа отображения не только имени группы, но и некоторых других элементов данных, содержащихся в подаче JSON в сетку.

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

1 ответ

Решение

Я нахожу ваш вопрос интересным, но реализация не проста. В ответе я показал, как можно использовать пользовательский форматер в итоговых строках группировки.

В демоверсии вы можете увидеть, как реализовать пользовательское форматирование текста группировки. Демо-версия отображает следующее:

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

Одна часть кода, которая получает тексты типа "(test4,test7)", не так эффективна в случае использования большого количества строк, но работает.

Ниже приведен код форматера столбца "Дата", который обычно используется с предопределенным formatter: 'date', В части кода я назвал исходный форматер даты, но для группировки текста использовал более сложный код:

formatter: function (cellval, opts, rowObject, action) {
    var fullOpts = $.extend({}, $.jgrid.formatter.date, opts),
        formattedDate = $.fmatter.util.DateFormat('Y-m-d', cellval, 'd-M-Y', fullOpts),
        groupIdPrefix = opts.gid + "ghead_",
        groupIdPrefixLength = groupIdPrefix.length,
        month = Number(cellval.split('-')[1]), // input format 'Y-m-d'
        names = [], data, i, l, item;

    // test wether opts.rowId start with opts.gid + "ghead_" and integer
    // and rowObject is the array and action is undefined.

    if (opts.rowId.substr(0, groupIdPrefixLength) === groupIdPrefix && typeof action === "undefined") {
        // custom formating of the group header
        // we just simulate some login by testing of the month > 9

        // the next code fragment is not effective, but it can be used
        // in case of not so large number of groups and the local data
        data = $(this).jqGrid("getGridParam", "data");
        for (i = 0, l = data.length; i < l; i++) {
            item = data[i];
            if (item.invdate === cellval) {
                names.push(item.name);
            }
        }

        return (month > 9 ? ('<span class="ui-icon ui-icon-alert" style="float: left;"></span>' +
            '<span style="color:tomato; margin-left: 5px;">') : "<span>") +
            formattedDate + ' (' + names.join() + ')</span>'
    }
    return formattedDate;
}

ОБНОВЛЕНО: исправленная версия демо здесь. Оно использует $.fn.fmatter вместо того, чтобы в настоящее время удалены из метода jqGrid $.fmatter.util.DateFormat,

Другие вопросы по тегам