2013-04-18 3 views
0

Я читал об использовании getCol Metod из jqgrid для отображения в обобщенный столбец в нижних сетках в этом question что-то вроде:Sumarize Колонна на Jqgrid

var grid = $("#list"), 
sum = grid.jqGrid('getCol', 'amount', false, 'sum'); 

grid.jqGrid('footerData','set', {ID: 'Total:', amount: sum}); 

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

Это должно быть сделано с использованием foreach, или есть какой-то способ сделать это наиболее эффективным?

Очевидно, что я мог бы включить его в моей модели, но хотят сделать это на стороне клиента

ответ

2

Если вы не проходите вниз весь набор данных не существует никакого способа сделать это с несколькими страницами. Было бы очень легко сделать это и передать эти данные как часть ваших пользовательских данных.

Ex

Контроллер:

foreach (var item in dataset) 
    { 
     summaryTotal += (sum of some relevant values) 
    } 
    ... 
    records = totalRecords,     
    userdata = new { ColumnNameForFooterSubtotal = summaryTotal.ToString() }, 
    rows = (
    ... 

Тогда на ваш взгляд, я бы рекомендовал использовать колонтитул, то значение, которое вы вычисляться в контроллере будет отображаться в нижней строке имени столбца, который вы использовали выше , (ColumnNameForFooterSubtotal)

...//jqGrid setup 
    //turn on the footer 
    footerrow: true, 
    userDataOnFooter: true, 
0

Вы можете использовать grid.jqGrid("getGridParam", "data") первую, чтобы получить внутренние данные сетки. Данные содержат информацию о все страницы. Затем вы можете сделать простой цикл for, чтобы перечислять элементы в массиве, возвращаемые grid.jqGrid("getGridParam", "data"). Каждый предмет имеет свойство amount. Поэтому вам нужно использовать parseInt(item.amount, 10) для преобразования данных в int (или использовать parseFloat) и рассчитать требуемую сумму.

+0

Этот ответ предполагает, что 'loadOnce: true'? – Mark

+0

@Mark: Да, из-за причины! Или 'datatype:" local "' или какой-то удаленный 'datatype' (" json "," xml "или" jsonp ") с' loadonce: true'. Если использовать 'datatype:" json "' без 'loadonce: true', то невозможно вычислить данные на стороне клиента, которых у этого нет. Если вы не используете и не хотите использовать 'loadonce: true', то один * должен * сделать это на стороне сервера и поместить результат в' userdata' (как в вашем ответе). – Oleg

+0

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