При использовании rowcallback индекс строки данных не работает должным образом - PullRequest
0 голосов
/ 30 апреля 2019

Индексирование столбцов для записей таблицы не соответствует при использовании разбиения на страницы, а параметр 'nRow' функции fnRowCallback возвращает только видимые записи выбранной страницы, а не все записи.

Я приложил снимок проблемы для лучшего понимания. Я пробовал большинство сценариев, указанных в DataTable, но не работает. 1-я страница с индексированием неправильно отображается при переключении между страницами в нумерации страниц.

Данные столбца являются динамическими, поэтому я создал пустой столбец для S.no, чтобы обновить индекс для записи, добавляемой в datatable. Индекс отлично работает в представлении при использовании fnRowCallback. Но индексация записей не соответствует, когда я пытаюсь распечатать или экспортировать в pdf записи таблицы.

1st Time the indexing working fine when exporting the document

The picture showing Exported document which Index mismatch after switching over from from one page to another

$.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>&nbsp; <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>&nbsp; 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 ");
    }
});

Я ожидаю, что индекс каждой записи должен назначаться правильно, но индексация не соответствует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...