jQWidgets Forums

jQuery UI Widgets Forums Grid Displaying aggregation result / value – issue

This topic contains 3 replies, has 2 voices, and was last updated by  Peter Stoev 10 years, 9 months ago.

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author

  • raj
    Participant

    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;
    }


    Peter Stoev
    Keymaster

    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 Stoev

    jQWidgets Team
    http://www.jqwidgets.com


    raj
    Participant

    Hi 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>

    Peter Stoev
    Keymaster

    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 Stoev

    jQWidgets Team
    http://www.jqwidgets.com

Viewing 4 posts - 1 through 4 (of 4 total)

You must be logged in to reply to this topic.