jQWidgets Forums
jQuery UI Widgets › Forums › Grid › Displaying aggregation result / value – issue
Tagged: Aggregation, grouping, parsing, roundoff
This topic contains 3 replies, has 2 voices, and was last updated by Peter Stoev 10 years, 9 months ago.
-
Author
-
Hi,
We are facing datatype issue at grouping with an aggregation. Screenshot for our problem located at http://postimg.org/image/u3zdg7w2d/
We provide the “type” – “float” at column definition but still parsing not happened
Consider the following aggregation group render code
groupsrenderer = function (text, group, expanded, data) {
var dataAdapter = new $.jqx.dataAdapter(ds); // Here ds- datasource via JSON format
var number = dataAdapter.formatNumber(group, data.groupcolumn.cellsformat);
var text = data.groupcolumn.text + ‘: ‘ + number;
if (data.subItems.length > 0) {
for (var y = 0; y < aggregatefield.length; y++) {
types[aggregatefield[y] + y] = this.getcolumnaggregateddata([aggregatefield[y]], [[aggregateoperation[y]]], true, data.subItems);
}
}
else {
var rows = new Array();
var getRows = function (group, rows) {
if (group.subGroups.length > 0) {
for (var i = 0; i < group.subGroups.length; i++) {
getRows(group.subGroups[i], rows);
}
} else {
for (var i = 0; i < group.subItems.length; i++) {
rows.push(group.subItems[i]);
}
}
}
getRows(data, rows);
for (var y = 0; y < aggregatefield.length; y++) {
types[aggregatefield[y] + y] = this.getcolumnaggregateddata([aggregatefield[y]], [[aggregateoperation[y]]], true, rows);
}
}
var columngroup = [];
for (var p = 0; p < aggregatefield.length; p++) {
columngroup.push($.inArray(aggregatefield[p], colName));
}var tt = ”;
for (z = 0; z < aggregatefield.length; z++) {
tt += columngroup[z] + “,” + types[aggregatefield[z] + z][aggregateoperation[z]] + “,”;
}
tt = tt.slice(0, -1);
var newtt = text + “|” + tt;
return newtt;
}Hi raj,
As far as I see, you use custom aggregates in the grouping. This means that you’re responsible for the parsing, not the Grid, because the function’s result is what will be displayed in the Grid.
Best Regards,
Peter StoevjQWidgets Team
http://www.jqwidgets.comHi Peter Stoev,
Thanks for your support,
Consider my full source code, is there any way to resolve the above mentioned issue.<!DOCTYPE html> <html lang="en"> <head> <title id='Description'>Demo</title> <link rel="stylesheet" href="../Assets/jqwidgets/styles/jqx.base.css" type="text/css" /> <script src="../Assets/Scripts/jquery-1.11.1.js" type="text/javascript"></script> <script src="../Assets/jqwidgets/jqx-all.js" type="text/javascript"></script> <style type="text/css"> .jqx-grid-group-cell { border-left-width: 1px; border-right-width: 1px; } </style> <script type="text/javascript"> $(document).ready(function () { var depart = [{ department: "Dept1", project: "p1", person: "a", planhrs: 18.15, Actualhrs: 25.45 }, { department: "Dept1", project: "p1", person: "b", planhrs: 18.15, Actualhrs: 18.30 }, { department: "Dept2", project: "p2", person: "c", planhrs: 18.15, Actualhrs: 18.30 }, { department: "Dept2", project: "p1", person: "d", planhrs: 18.15, Actualhrs: 18.30 }, { department: "Dept1", project: "p2", person: "e", planhrs: 18.15, Actualhrs: 18.30 }]; var source = { datatype: "json", datafields: [{ name: 'department', type: 'string' }, { name: 'project', type: 'string' }, { name: 'person', type: 'string' }, { name: 'planhrs', type: 'float' }, { name: 'Actualhrs', type: 'float' }], localdata: depart }; var dataAdapter = new $.jqx.dataAdapter(source); var theme = 'office'; var toThemeProperty = function (className) { return className + " " + className + "-" + theme; } var groupsrenderer = function (text, group, expanded, data) { if (data.groupcolumn.datafield == 'planhrs' || data.groupcolumn.datafield == 'department' || data.groupcolumn.datafield == 'project' || data.groupcolumn.datafield == 'person') { var number = dataAdapter.formatNumber(group, data.groupcolumn.cellsformat); var text = data.groupcolumn.text + ': ' + number; if (data.subItems.length > 0) { var aggregate = this.getcolumnaggregateddata('planhrs', ['sum'], true, data.subItems); } else { var rows = new Array(); var getRows = function (group, rows) { if (group.subGroups.length > 0) { for (var i = 0; i < group.subGroups.length; i++) { getRows(group.subGroups[i], rows); } } else { for (var i = 0; i < group.subItems.length; i++) { rows.push(group.subItems[i]); } } } getRows(data, rows); var aggregate = this.getcolumnaggregateddata('planhrs', ['sum'], true, rows); } return aggregate.sum; } else { return '<div class="' + toThemeProperty('jqx-grid-groups-row') + '" style="position: absolute;"><span>' + text + '</span>'; } } $("#jqxgrid").jqxGrid({ width: '100%', pageable: true, autorowheight: true, autoheight: true, altrows: true, source: dataAdapter, columnsresize: true, groupable: true, sortable: true, groupsrenderer: groupsrenderer, groupsexpandedbydefault: true, selectionmode: 'singlecell', altrows: true, //groups: ['department'], columns: [{ text: 'department', datafield: 'department', widht: 'auto' }, { text: 'project', datafield: 'project', widht: 'auto' }, { text: 'person', datafield: 'person', widht: 'auto' }, { text: 'planhrs', datafield: 'planhrs', cellsalign: 'right', widht: 'auto', type: "float" }, { text: 'salary', datafield: 'salary', cellsalign: 'right', widht: 'auto', type: "float" }] }); }); </script> </head> <body> <div id="jqxgrid"> </div> </body> </html>
Hi raj,
The problem here is that the groupsrenderer returns not-formatted number. I think that you will have to use the dataAdapter’s formatNumber to format your number and after that return it as function result.
Best Regards,
Peter StoevjQWidgets Team
http://www.jqwidgets.com -
AuthorPosts
You must be logged in to reply to this topic.