DataTables

DataTables - Row grouping with expand/collapse and rowcount

by Karmik Patel

HTML

<link rel="stylesheet" href="//nightly.datatables.net/css/jquery.dataTables.css">
<script src="//nightly.datatables.net/js/jquery.dataTables.js"></script>
<link rel="stylesheet" href="//cdn.datatables.net/rowgroup/1.0.2/css/rowGroup.dataTables.min.css">
<script src="//cdn.datatables.net/rowgroup/1.0.2/js/dataTables.rowGroup.min.js"></script>
<script src="https://cdn.datatables.net/buttons/1.2.2/js/buttons.html5.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.32/pdfmake.min.js"></script>
<link rel="stylesheet" href="//cdn.datatables.net/buttons/1.5.1/css/buttons.dataTables.css">
<script src="//cdn.datatables.net/buttons/1.5.1/js/dataTables.buttons.js"></script>
<script src="//cdn.datatables.net/buttons/1.5.1/js/buttons.colVis.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script src="//cdn.datatables.net/buttons/1.5.1/js/buttons.colVis.min.js"></script>
<div class="container">
  <table id="example" class="display" style="width:100%">
    <thead>
      <tr>
        <th>Name</th>
        <th>Position</th>
        <th>Office</th>
        <th>Age</th>
        <th>Start date</th>
        <th>Salary</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td >T. Nixon</td>
        <td>System Architect</td>
        <td>Edinburgh</td>
        <td>61</td>
        <td > </td>
        <td >$320,800/y</td>
      </tr>
      <tr>
        <td data-search="Cedric Kelly">C. Kelly</td>
        <td>Senior Javascript Developer</td>
        <td>Edinburgh</td>
        <td>22</td>
        <td data-order="1332979200">Thu 29th Mar 12</td>
        <td data-order="433060">$433,060/y</td>
      </tr>
      <tr>
        <td data-search="Airi Satou">A. Satou</td>
        <td>Accountant</td>
        <td>Tokyo</td>
        <td>33</td>
        <td data-order="1227830400">Fri 28th Nov 08</td>
        <td data-order="162700">$162,700/y</td>
      </tr>
      <tr>
        <td data-search="Brielle Williamson">B....

CSS

body {
  font: 90%/1.45em "Helvetica Neue", HelveticaNeue, Verdana, Arial, Helvetica, sans-serif;
  margin: 0;
  padding: 0;
  color: #333;
  background-color: #fff;
}

JavaScript

$(document).ready(function() {
  var collapsedGroups = {};

  var table = $('#example').DataTable({
    paging: false,
    order: [
      [2, 'asc']
    ],
    rowGroup: {
      // Uses the 'row group' plugin
      dataSrc: 2,
      startRender: function(rows, group) {
        var collapsed = !!collapsedGroups[group];
				var disp = group;
        rows.nodes().each(function (r) {
          r.style.display = 'none';
          if (collapsed) {
            r.style.display = '';
          }});

        // Add category name to the <tr>. NOTE: Hardcoded colspan
        return $('<tr/>')
          .append('<td colspan="8">' + disp + ' (' + rows.count() + ')</td>')
          .attr('data-name', group)
          .toggleClass('collapsed', collapsed);
      }
    }
  });

  $('#example tbody').on('click', 'tr.group-start', function() {
    var name = $(this).data('name');
    collapsedGroups[name] = !collapsedGroups[name];
    table.draw(false);
  });

});