Server-side row grouping demo
Demonstrated features
- row group
 - responsive table
 - default styling
 
Required skills
- expert
 
Required license
- premium
 
This data table is ordered and grouped by product line. The ordering within the group cannot be changed interactively. This is only possible with client-side processing. Enter mini in the search box to see row grouping in action
| Product line | Product ID | Product name | Vendor | Stock | Price | Retail price | Description | 
|---|---|---|---|---|---|---|---|
| Product line | Product ID | Product name | Vendor | Stock | Price | Retail price | Description | 
How to add row grouping
The following options were added to this dat atable (read more). The fnRowCallback adds a $ in front of the amount columns.
Advanced options to add row grouping:
{
    "rowGroup": {
        "dataSrc": 0,
        "endRender": "function ( rows, group ) { return code_manager_row_grouping_demo(rows, group) }" },
        "orderFixed": [0, "asc"], 
        "ordering": false, 
        "fnRowCallback": "function(row, data, index) { jQuery(row).find('td:eq(5)').text('$' + data[5]);jQuery(row).find('td:eq(6)').text('$' + data[6]); }"
}
				The endRender function of this rowGroup calls javascript function code_manager_row_grouping_demo. This function was added to this page with the Code Manager.
			JavaScript to add row grouping:
function code_manager_row_grouping_demo(rows, group) {
    var avgInStock = rows.data().pluck(4).reduce(
        function (a, b) { return parseFloat(a) + parseFloat(b); }
    ) / rows.count();
    var avgPrice = rows.data().pluck(5).reduce(
        function (a, b) { return parseFloat(a) + parseFloat(b); }
    ) / rows.count();
    avgPrice = jQuery.fn.dataTable.render.number('.', ',', 2, '$').display( avgPrice );
    
    var avgRetailPrice = rows.data().pluck(6).reduce(
        function (a, b) { return parseFloat(a) + parseFloat(b); }
    ) / rows.count();
    avgRetailPrice = jQuery.fn.dataTable.render.number('.', ',', 2, '$').display( avgRetailPrice );
    //return "Average for " + group + ": " + Math.floor(avgInStock) + " : " + avgPrice + " : " + avgRetailPrice;
    return jQuery('<tr/>')
            .append('<td colspan="4">Averages for '+group+'</td>' )
            .append('<td class="quantityInStock">'+Math.floor(avgInStock)+'</td>')
            .append('<td class="buyPrice">'+avgPrice+'</td>')
            .append('<td class="MSRP">'+avgRetailPrice+'</td>');
}
				Limitations
- Column ordering cannot be changed interactively with server-side processing (only supported with client-side processing)
 - Nested grouping is not supported
 - Grouping information is not exported (PDF, CSV, etc)
 

0 Comments