В JQGrid, возможно ли использовать другой форматер при группировке итоговой ячейки, отличный от форматера столбца?

Можно ли использовать другой форматер для строк данных и итоговой строки? Например, я хочу добавить сводную информацию (summaryType= count) в столбец, отформатированный для флажка, итоговое значение отображается в виде флажка. есть идеи?

виды, Альпер

Вы можете увидеть скриншот здесь:

2 ответа

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

Прежде всего я подготовил демо, которое отображает следующие результаты:

Как вы видите, итоговая строка имеет много элементов, которые отформатированы по-разному:

Чтобы иметь итоговую строку в конце каждого блока группировки, нам нужно определить groupSummary: [true] недвижимость в groupingView параметр jqGrid. Затем нам нужно определить свойство summaryType для всех столбцов в colModel где итоговая строка имеет не пустую ячейку.

Например, в простейшем случае я определил для столбца 'amount' недвижимость summaryType: 'sum',

Для колонки 'tax' Я определил summaryTpl дополнительно:

summaryTpl: '<i>{0}</i>', summaryType: 'sum'

В результате резюме для 'tax' столбец содержит курсивный текст.

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

//formatter: 'number',
formatter: function (cellval, opts, rwdat, act) {
    if (opts.rowId === "") {
        if (cellval > 1000) {
            return '<span style="color:green">' +
                $.fn.fmatter('number', cellval, opts, rwdat, act) +
                '</span>';
        } else {
            return '<span style="color:red">' +
                $.fn.fmatter('number', cellval, opts, rwdat, act) +
                '</span>';
        }
    } else {
        return $.fn.fmatter('number', cellval, opts, rwdat, act);
    }
},
summaryType: 'sum'

Вместо formatter: 'number' Я использовал пользовательский форматтер. Я не хотел реализовывать formatter: 'number' еще раз, поэтому я вызвал предопределенный форматер "число" в отношении $.fn.fmatter('number', cellval, opts, rwdat, act),

Наиболее важной частью приведенного выше кода является строка

if (opts.rowId === "") {

Во время форматирования ячеек сетки пользовательский форматер будет вызываться с opts.rowId инициализируется как идентификатор строки. Только в случае форматирования строки резюме opts.rowId будет пустой строкой (""). Я использую этот факт для реализации пользовательского форматирования.

В колонке 'closed' Я показываю еще один трюк. Я использую summaryType определяется как функция. Можно использовать это, чтобы сделать некоторые пользовательские сводные вычисления в качестве стандартных типов: "сумма", "мин", "макс", "количество" и "avg". В демоверсии я отображаю "количество" всех и "количество" выбранных флажков и отображаю результаты в сводке. Кроме того, в итоговой ячейке дополнительно установлен флажок, который проверяется, если установлен хотя бы один флажок в группе. Соответствующий код, включая пользовательский форматировщик, выглядит следующим образом:

formatter: function (cellval, opts, rwdat, act) {
    if (opts.rowId === "") {
        return '<span style="display:inline-block;top:-2px;position:relative;">' +
            cellval.checkedCount + ' of ' + cellval.totalCount + '</span>&nbsp;' +
            $.fn.fmatter('checkbox', cellval.max, opts, rwdat, act);
    } else {
        return $.fn.fmatter('checkbox', cellval, opts, rwdat, act);
    }
},
summaryType: function (val, name, record) {
    if (typeof (val) === "string") {
        val = {max: false, totalCount: 0, checkedCount: 0};
    }
    val.totalCount += 1;
    if (record[name]) {
        val.checkedCount += 1;
        val.max = true;
    }
    return val;
}

Нам нужно держать в дереве разные значения, которые мы вычисляем: totalCount, checkedCount а также max, Код выше показывает, что можно изменить исходную строку val параметр объекта, который содержит всю информацию, которая нам нужна. Во время форматирования итоговой строки пользовательский форматер будет вызываться с cellval инициализирован к val объект, который мы создали раньше. Таким образом, мы можем сохранить любую пользовательскую информацию, а затем отобразить ее.

Я надеюсь, что в отношении демоверсии вы сможете создать любую нужную вам строку группировки.

Вы используете пользовательский форматтер? то, что вы можете сделать, это сделать собственный форматировщик для отображения разных вещей на основе ввода. Я не уверен, что вы возвращаете true или false в качестве входных данных, но что-то вроде этого должно работать:

function checkboxFormatter(cellvalue,options,rowObject){
     if(typeof cellvalue == "number"){
          return cellvalue;
     }
     else if(cellvalue == "true"){
          return '<input type="checkbox" checked="checked" />';
     }
     else{
          return '<input type="checkbox" />';
     }
}

дайте мне знать, если у вас есть вопросы или если это не так, то что вы думаете

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