因此,目前我有一个数据表,该数据表显示了很多文件的时间表,我需要创建一个函数,将所有数据按其受尊重的文件分组,但是我发现的所有示例在初始化文件时都这样做数据表,但我需要使用自定义创建的按钮来执行此操作,并且无法找到有关如何以这种方式执行操作的任何示例或文档
代码将只创建一个表,但我希望有一个值为“ Group Items”的按钮,然后单击该按钮后,应按文件将所有分组
$('#data-table-timesheet').DataTable({
ajax: {
url: '@Url.Action("GetTimeSheets", "Home")',
data: function (d) {
d.from = $("#DateStart").data('datepicker').getFormattedDate('yyyy-MM-dd'),
d.to = $("#DateEnd").data('datepicker').getFormattedDate('yyyy-MM-dd'),
d.partyId = parseInt($("#UserId").val())
},
dataSrc: 'Data'
},
"footerCallback": function (row, data, start, end, display) {
var api = this.api(), data;
// Remove the formatting to get integer data for summation
var intVal = function (i) {
return typeof i === 'string' ?
i.replace(/[\$,]/g, '') * 1 :
typeof i === 'number' ?
i : 0;
};
// Total over all pages
total = api
.column(8, { page: 'current' })
.data()
.reduce(function (a, b) {
return intVal(a) + intVal(b);
}, 0);
// Total over this page
pageTotal = api
.column(7, { page: 'current' })
.data()
.reduce(function (a, b) {
return intVal(a) + intVal(b);
}, 0);
// Update footer
$(api.column(7).footer()).html(
'R' + parseInt(pageTotal).toFixed(2)
);
pageTotal = api
.column(8, { page: 'current' })
.data()
.reduce(function (a, b) {
return intVal(a) + intVal(b);
}, 0);
// Update footer
$(api.column(8).footer()).html(
'R' + parseInt(pageTotal).toFixed(2)
);
var uTotal = api
.cells(function (index, data, node) {
if (api.row(index).data().LastModified == null && api.row(index).data().timelogId != null) {
return true;
}
else {
return false;
}
}, 6, { page: 'current' })
.data()
.reduce(function (a, b) {
return intVal(a) + intVal(b);
}, 0);
var cTotal = api
.cells(function (index, data, node) {
if (api.row(index).data().LastModified != null && api.row(index).data().timelogId != null || api.row(index).data().timelogId == null && parseInt(api.row(index).data().rateTotal) > 0) {
return true;
}
else {
return false;
}
}, 6, { page: 'current' })
.data()
.reduce(function (a, b) {
return intVal(a) + intVal(b);
}, 0);
$(api.column(6).footer()).html(
"C(" + parseInt(cTotal).toFixed(0).toString().secondsToHHMMSS() + ")" + "<br/> U(" + parseInt(uTotal).toFixed(0).toString().secondsToHHMMSS() + ")"
);
},
"columns": [
{
"data": "isJoined",
"render": function (data, type, row) {
if (row.isJoined == 1) {
return '<i class="fa fa-fw f-s-10 m-r-5 fa-circle text-primary"></i>';
}
else {
return "";
}
}
},
{
"data": "StartDate",
"render": function (data, type, row) {
return moment(data).format("YYYY-MM-DD HH:mm").toString().trim();
}
},
{
"data": "EndDate",
"render": function (data, type, row) {
return moment(data).format("YYYY-MM-DD HH:mm");
}
},
{ "data": "fileRef" },
{ "data": "CategoryName" },
{ "data": "Notes" },
{
"data": "BillableMinutes",
"render": function (data, type, row) {
if (row.rateTotal > 0 ) {
return data.toString().secondsToHHMMSS();
}
else {
var x = (data / 60);
return x.toFixed(2);
}
}
},
{ "data": "rateTotal" },
{ "data": "disbursementTotal" }
],
"createdRow": function (row, data, dataIndex) {
if (data.LastModified == null && data.timelogId != null) {
$(row).addClass('redClass');
}
},
"deferRender": true,
autoWidth: false,
bAutoWidth: false,
dom: 'Bfrtip',
paging: false,
select: true,
responsive: true,
select: {
style: 'multi'
},
buttons: [
{ extend: 'copyHtml5', footer: true },
{ extend: 'excelHtml5', footer: true },
{ extend: 'csvHtml5', footer: true },
{ extend: 'pdfHtml5', footer: true }
],
columnDefs: [
{
targets: 5,
render: $.fn.dataTable.render.ellipsis(50, true, true)
},
{ "width": "5px", "targets": 0 },
{ "width": "135px", "targets": 1 },
{ "width": "135px", "targets": 2 },
{ "width": "1px", "targets": 3 },
{ "width": "1px", "targets": 4 },
{ "width": "400px", "targets": 5 },
{ "width": "2px", "targets": 6 },
{ "width": "1px", "targets": 7 },
{ "width": "1px", "targets": 8 }
]
});
下面列出的代码是在初始化数据表时我如何进行行分组,但是我需要在单独的按钮中进行行分组,因此当用户单击按钮时,它只会分组然后
"drawCallback": function (settings) {
var api = this.api();
var rows = api.rows({ page: 'current' }).nodes();
var last = null;
api.column(3, { page: 'current' }).data().each(function (group, i) {
if (last !== group) {
$(rows).eq(i).before(
'<tr class="group"><td colspan="5">' + group + '</td></tr>'
);
last = group;
}
});
},
答案 0 :(得分:1)
因此,在搜索互联网几天后,我没有找到解决方案,而是创建了一个bool类型的全局变量,因此在绘制数据表时,它会在drawcall back函数中查看该全局变量是否设置为true还是不设置,并且取决于条件,它是否会分组,因此用户每次单击要分组的按钮后,我都会每次绘制表格
"drawCallback": function (settings) {
if(groupBy == true){
var api = this.api();
var rows = api.rows({ page: 'current' }).nodes();
var last = null;
api.column(3, { page: 'current' }).data().each(function (group, i) {
if (last !== group) {
$(rows).eq(i).before(
'<tr class="group"><td colspan="5">' + group + '</td></tr>'
);
last = group;
}
}
});
},