jQuery Datatables如何使用行分组打印表?

几天我试图用行分组来实现dataTable打印视图,但仍然无法正常工作.. 🙁

我有一个dataTable,其中一列是隐藏的,该列是行分组的。 与此示例中的相同: https : //datatables.net/examples/advanced_init/row_grouping.html

我正在使用按钮扩展( https://datatables.net/extensions/buttons/ )打印按钮。 当我点击打印按钮时,我会看到我的dataTable的所有列,即使是一列也应该被隐藏。 然后我使用了一个选项“columns”:“:visible”,只打印可见列,但它再次不好,因为缺少分组的行。

那么有谁知道如何在Print视图中使用行分组作为原始dataTable获取相同的表?

table = $('#vartTable').DataTable({ "dom": "Bt", "paging": false, "fixedHeader": { "headerOffset": -10 }, "autoWidth": false, "ordering": false, "data": data, "columns": [ {"data": "path",}, { "data": "username", "render": function(data, type, row) { return '' + row.username+ ''; } }, { "data": "name", "render": function (data, type, row) { return row.name+ ' ' + row.surname; } }, {"data": "details"} ], "columnDefs": [{"visible": false, "targets": 0}], "buttons": [ { "extend": 'print', "title": "", "text": 'Print current page', "autoPrint": false, "exportOptions": { "columns": ':visible', "modifier": { "page": 'current' } } } ], "drawCallback": function () { var api = this.api(); var rows = api.rows({page: 'current'}).nodes(); var last = null; api.column(0, {page: 'current'}).data().each(function (group, i) { if (last !== group) { $(rows).eq(i).before('' + group + ''); last = group; } }); } }); 

Datatable中不支持导出行搜索function。 您必须在datatables.buttons.js文件中的__exportData函数中添加分组代码,以便在导出之前将分组行添加到数据中,如下所示

 var grouped_array_index=config.grouped_array_index; //customised var no_of_columns = header.length; var no_of_rows = no_of_columns > 0 ? cells.length / no_of_columns : 0; var body = new Array( no_of_rows ); var body_data = new Array( no_of_rows ); //customised var body_with_nodes = new Array( no_of_rows ); //customised var body_with_nodes_static = new Array( no_of_rows ); //customised var cellCounter = 0; for ( var i=0, ien=no_of_rows ; i'+rows_with_nodes.join("")+''); body_with_nodes_static[i] = $.parseHTML(''+rows_with_nodes.join("")+''); } //console.log(dt.rows().nodes()); /******************************************** GROUP DATA *****************************************************/ var row_array=dt.rows().nodes(); var row_data_array=dt.rows().data(); var iColspan =no_of_columns; var sLastGroup = ""; var inner_html='',grouped_index; var individual_group_array= new Array(),sub_group_array= new Array(),total_group_array= new Array(); var no_of_splices=0; //to keep track of no of element insertion into the array as index changes after splicing one element for ( var i=0, row_length=body_with_nodes.length ; i< row_length; i++ ){ sub_group_array[i]= new Array(); individual_group_array[i]= new Array(); var sGroup=''; for(var k=0;k'; table_data[$column_index]=inner_html+" "; } else{ table_data_with_node+=''; table_data[$column_index]=''; } } body_with_nodes.splice(i+no_of_splices,0,$.parseHTML(''+table_data_with_node+'')); body_data.splice(i+no_of_splices,0,table_data); no_of_splices++; sLastGroup = sGroup; } }