Индексирование столбцов для записей таблицы не соответствует при использовании разбиения на страницы, а параметр 'nRow' функции fnRowCallback возвращает только видимые записи выбранной страницы, а не все записи.
Я приложил снимок проблемы для лучшего понимания. Я пробовал большинство сценариев, указанных в DataTable, но не работает. 1-я страница с индексированием неправильно отображается при переключении между страницами в нумерации страниц.
Данные столбца являются динамическими, поэтому я создал пустой столбец для S.no, чтобы обновить индекс для записи, добавляемой в datatable. Индекс отлично работает в представлении при использовании fnRowCallback. Но индексация записей не соответствует, когда я пытаюсь распечатать или экспортировать в pdf записи таблицы.
$.ajax({
type: "POST",
url: 'wsQueryBuilder.asmx/Getdataset1',
data: '{"strQuery": "' + strQuery + '","strCon": "' + strCon + '"}',
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function(response) {
$("#spnGetdet").html(response.d);
var combo = eval(response.d);
var trHTML = "";
var rptHdrstr;
var counter = 0;
var col = [];
var colno = [];
var resultColumns = [];
var trhead = "";
var trfoot = "";
var alignColumns = [];
var totalColumns = [];
var warpColumns = [];
var strPrnTotal = "";
groupColumn = 0;
aggrgColumn = 0;
groupColumnName = "";
aggrgColumnName = "";
aggrgType = 0;
$('#tblrptviewhdr thead').find('tr').remove().end()
$('#tblrptviewhdr tbody').find('tr').remove().end()
$('#tblrptviewhdr tfoot').find('tr').remove().end()
var obj;
var alignobj;
var totobj;
obj = {
sWidth: "20px",
data: 'id',
sDefaultContent: '',
};
resultColumns.push(obj);
var cp = 0;
var selectCtrl = document.getElementById("cboRptGroupBy");
for (var key in combo[0]) {
if (col.indexOf(key) === -1) {
cp = cp + 1;
col.push(key);
colno.push(col.indexOf(key) + 1);
trhead += ('<th>' + key + '</th>')
trfoot += ('<th></th>')
if (typeof combo[0][key] === "number") {
alignobj = cp;
totobj = 1;
alignColumns.push(alignobj);
} else {
totobj = 0;
}
obj = { "mDataProp": key };
resultColumns.push(obj);
totalColumns.push(totobj);
warpColumns.push(cp);
if (selectCtrl.options[selectCtrl.selectedIndex].text == key) {
groupColumn = cp;
groupColumnName = selectCtrl.options[selectCtrl.selectedIndex].text;
}
if (document.getElementById("cboRptAggrgBy").value == key) {
aggrgColumn = cp;
aggrgColumnName = document.getElementById("cboRptAggrgBy").value;
}
}
if (alignColumns.length > 0) {
if ($('#chkResponsive').is(':checked')) {
var theadervalue = '<tr><th>S.No</th>' + trhead + '</tr>';
var tfootervalue = '<tr><th>Total </br></th>' + trfoot + '</tr>';
$("#trfooter").css("display", "");
} else {
var theadervalue = '<tr><th>S.No</th>' + trhead + '</tr>';
var tfootervalue = '<tr><th>Total </br></th>' + trfoot + '</tr>';
$("#trfooter").css("display", "");
}
} else {
var theadervalue = '<tr><th>S.No</th>' + trhead + '</tr>';
var tfootervalue = '<tr><th></th>' + trfoot + '</tr>';
$("#trfooter").css("display", "none");
}
$('#trheader').append(theadervalue)
$('#trfooter').append(tfootervalue)
$("#tblrptviewhdr").css("display", "");
var QbDTdata = {
data: combo,
columns: resultColumns,
"bDestroy": true,
"bFilter": true,
"oTableTools": true,
"bLengthChange": true,
"bInfo": true,
"oLanguage": true,
"paging": true,
"colReorder": true,
"bFooter": true,
"responsive": true,
"oLanguage": { "oPaginate": { "sPrevious": "<", "sNext": ">" } },
"pageLength": true,
//"iDisplayLength": tblPageLen,
"aLengthMenu": [
[10, 25, 50, 100, -1],
[10, 25, 50, 100, "All"]
],
dom: 'Bfrtip',
stateSaveParams: function(settings, data) {
for (var i = 0, ien = data.columns.length; i < ien; i++) {
delete data.columns[i].visible;
}
},
"stateLoadParams": function(settings, data) {
data.order = "";
},
"fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull) {
var index = iDisplayIndexFull + 1;
$('td:first', nRow).html(index);
console.log(nRow)
return nRow;
},
"columnDefs": [
{ className: "dt-body-right", "targets": alignColumns },
{ className: "text-nowrap", "targets": warpColumns },
{ "searchable": false, "orderable": true, "targets": [0] }
],
"aDataSort": [groupColumn, 'asc'],
orderCellsTop: true,
initComplete: function() {
var info = this.api().page.info();
console.log('Total records', info.recordsTotal);
document.getElementById("lblTotalRecords").innerHTML = "Total Record(s) : " + info.recordsTotal;
if ($('#chkAddFilter').is(':checked')) {
if (groupColumn == 0) {
configFilter(this, warpColumns);
}
}
},
buttons: [{
extend: 'print',
text: '<i class="fa fa-print" style="color: #313131;"></i> <u>P</u>rint',
css: 'btn btn-primary button-input',
key: {
key: 'p',
altkey: true
},
message: '',
titleAttr: 'print',
title: '',
header: true,
footer: true,
autoPrint: true,
exportOptions: {
columns: ':visible',
grouped_array_index: groupColumnName,
aggrg_array_index: aggrgColumnName,
grouped_index: groupColumn,
aggrg_index: aggrgColumn,
aggrg_type: document.getElementById("cboRptAggrgType").value,
fileexp_type: 1
}
},
{
extend: 'pdfHtml5',
text: '<i class="fa fa-file-pdf-o" style="color: #ff2116;"></i> P<u>D</u>F',
titleAttr: 'PDF',
//download: 'open',
filename: frmQryView.hRptHdr.value,
key: {
key: 'd',
altkey: true
},
header: true,
footer: true,
orientation: PrnOrientation,
pageSize: PrnPaperSize,
exportOptions: {
columns: ':visible', //PdfExpClm,
stripHtml: true,
stripNewlines: false,
grouped_array_index: groupColumnName,
aggrg_array_index: aggrgColumnName,
grouped_index: groupColumn,
aggrg_index: aggrgColumn,
aggrg_type: document.getElementById("cboRptAggrgType").value,
fileexp_type: 2
}
}
],
"bStateSave": true,
"fixedHeader": tblFixHdr
};
}
},
failure: function(msg) {
alert("No records to display ");
}
});
Я ожидаю, что индекс каждой записи должен назначаться правильно, но индексация не соответствует.