Datatables row grouping - how to add rowcount per group and expand/collapse all
Datatables row grouping - how to add rowcount per group and expand/collapse all
by jasonblewis
HTML
<link rel="stylesheet" href="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/css/jquery.dataTables.css">
<script src="http://ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.4/jquery.dataTables.min.js"></script>
<table id="job_history">
<thead>
<tr>
<th>Person</th>
<th>Activity</th>
<th>Time</th>
<th>Date</th>
<th>Ticket</th>
<th>daily group</th>
<th>single job group</th>
<th>minutes to sum</th>
</tr>
</thead>
<tbody>
<tr>
<td>Peter</td>
<td>busy work</td>
<td>5 minutes</td>
<td>5/17/2013</td>
<td>12345</td>
<td>Job 1<br /><div id='group_sum'>0</div></td><!--daily group-->
<td>5/17/2013</td><!--single job group-->
<td class="minutes_to_sum">5</td><!--minutes to sum-->
</tr>
<tr>
<td>Paul</td>
<td>research</td>
<td>6 minutes</td>
<td>5/18/2013</td>
<td>12345</td>
<td>Job 1<br /><div id='group_sum'>0</div></td><!--daily group-->
<td>5/17/2013</td><!--single job group-->
<td class="minutes_to_sum">6</td><!--minutes to sum-->
</tr>
<tr>
<td>Peter</td>
<td>research</td>
<td>8 minutes</td>
<td>5/18/2013</td>
<td>12345</td>
<td>Job 2<br /><div id='group_sum'>0</div></td><!--daily group-->
<td>5/17/2013</td><!--single job group-->
<td class="minutes_to_sum">8</td><!--minutes to sum-->
</tr>
<tr>
<td>Mary</td>
<td>research</td>
<td>7 minutes</td>
<td>5/18/2013</td>
<td>12345</td>
<td>Job 2<br /><div id='group_sum'>0</div></td><!--daily group-->
<td>5/17/2013</td><!--single job group-->
<td class="minutes_to_sum">7</td><!--minutes to sum-->
</tr>
<tr>
<td>Peter</td>
<td>research</td>
<td>9 minutes</td>
<td>5/18/2013</td>
<td>12345</td>
<td>Job 2<br /><div id='group_sum'>0</div></td><!--daily group-->
<td>5/17/2013</td><!--single job group-->
<td class="minutes_to_sum">9</td><!--minutes to sum-->
</tr>
<tr>
<td>Mary</td>
<td>research</td>
<td>4...
CSS
.rowCount-grid
{
float: right;
font-size: 15px;
color: Red;
padding-right: 250px;
}
tr:hover th, tr:hover td
{
background-color: #ebebeb;
background-image: none;
}
td
{
height: 26px;
padding: 0px 0px 0px 20px !important;
text-align: left;
border-bottom: 1px solid #d0d0d0;
vertical-align: middle;
color: #555555;
background-color: #ffffff;
}
td.group
{
background-color: #d5eafd !important;
border-bottom: 1px solid #94bafd;
border-top: 1px solid #94bafd;
}
td.expanded-group
{
background: url("http://jquery-datatables-row-grouping.googlecode.com/svn/trunk/media/images/minus.jpg") no-repeat scroll left center transparent;
}
tr:hover td.expanded-group
{
background: url("http://jquery-datatables-row-grouping.googlecode.com/svn/trunk/media/images/minus.jpg") no-repeat scroll left center #c0e1ff !important;
}
td.collapsed-group
{
background: url("http://jquery-datatables-row-grouping.googlecode.com/svn/trunk/media/images/plus.jpg") no-repeat scroll left center transparent;
}
tr:hover td.collapsed-group
{
background: url("http://jquery-datatables-row-grouping.googlecode.com/svn/trunk/media/images/plus.jpg") no-repeat scroll left center #c0e1ff !important;
}
.DataTables_sort_wrapper span
{
float: right;
}
JavaScript
$(function() {
oTable = $('#job_history').dataTable({
"aoColumnDefs": [
{ "bVisible": false, "aTargets": [ 4,5,6 ] },
],
"aLengthMenu": [[10, 25, 50, -1], ["Show 10 entries", "Show 25 entries", "Show 50 entries", "Show all entries"]],
"iDisplayLength" : -1,
"aaSortingFixed": [[ 5, 'asc' ]],
"aaSorting": [[ 5, 'asc' ]],
"bJQueryUI": true,
"sDom": '<flip>',
"fnDrawCallback": function ( oSettings ) {
if ( oSettings.aiDisplay.length == 0 )
{
return;
}
// GROUP ROWS
var nTrs = $('#job_history tbody tr');
var iColspan = nTrs[0].getElementsByTagName('td').length;
var sLastGroup = "";
for (var i = 0; i < nTrs.length; i++)
{
var iDisplayIndex = oSettings._iDisplayStart + i;
var sGroup = oSettings.aoData[ oSettings.aiDisplay[iDisplayIndex] ]._aData[ 5 ];
if ( sGroup != sLastGroup )
{
var nGroup = document.createElement( 'tr' );
var nCell = document.createElement( 'td' );
nCell.colSpan = iColspan;
nCell.className = "group";
nCell.innerHTML = sGroup;
nGroup.appendChild( nCell );
nTrs[i].parentNode.insertBefore( nGroup, nTrs[i] );
sLastGroup = sGroup;
}
}
// SUM COLUMNS WITHIN GROUPS
$('#job_history tbody tr:has(td.group)').each(function() {
var sum = 0;
$(this).nextUntil(':not(:has(td.minutes_to_sum))').each(function() {
console.log($(this));
...