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

5

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

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

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

Ваш Ответ

1   ответ
8

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

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

enter image description here

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

Одна часть кода, которая получает тексты типа «(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;
}

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

Я не думаю, что могу использоватьloadonce: true потому что я хочу использовать пейджинг и тому подобное, и я понимаю, что затем он отключается ... хотя я бы, конечно, отложил бы вас, если бы это было не так ... Я собираюсь работать над доступом к данным через метод ты упомянул. еще раз спасибо Mark
Спасибо за ответ .... мой проект не будет & t; быть там, где он есть без всех ваших ответов на Stackoverflow. Я работаю над этим примером и загружаю данные с сервера в формате JSON ... когда я пытаюсь получить доступ к данным сетки, чтобы загрузить их в data = $ (this) .jqGrid (& quot; getGridParam & quot ;, & Quot; данные & Quot;); Он пустует ... Кажется, я ничего не могу найти по этому вопросу, но я должен предположить, что и this, и jqGrid ("getRowData") окажутся пустыми в этот момент в жизненном цикле сетки? Mark
Я попробовалuserdata метод передачи данных для моей сетки и пользовательского форматера, но казалось, что я буду дублировать данные, которые я буду передавать в мою сетку, поэтому я просто сделал, как вы предложили, и заполнил переменную черезbeforeProcessing и сделал его доступным для моей функции customformatter, затем проанализировал JSON ... У меня есть моя группа, отображающая дополнительные данные, которые я хотел ... надеюсь, они добавят улучшение в будущем, но пока работают отлично! Еще раз спасибо! Mark
@MarkR: Добро пожаловать! В случае чистых данных на стороне сервера самым простым решением будет либо использованиеbeforeProcessing «поймать» ответ сервера или вы можете подготовить всю работу, которая вам нужна на стороне сервера. Вы можете сделать группировку на сервере, построить подробные строки, которые вы будете использовать позже, внутри группировки текста и разместить информацию где-нибудь в ответе сервера. Например, вы можете использоватьuserdata и получить информацию отuserData параметр jqGrid. Подход будет оптимизация только таким же образом.
@MarkR: я рад, что мои старые ответы тоже помогли тебе. О тебе последний вопрос. Если вы используете данные на сервере без использованияloadonce: true и если вы не используете TreeGrid, то местныйdata Параметр не будет заполнен. В этом случае вы не можете получить доступ к полному ответу сервера.getRowData может помочь вам, только если сетка уже заполнена и поможет не внутри пользовательского форматера. В качестве обходного пути вы можете использоватьbeforeProcessing обратный вызов, чтобы сохранитьdata возвращается с сервера в переменной, определенной во внешней области видимости. Тогда вы сможете получить доступ к данным, как я описал выше.

Похожие вопросы