2015-10-06 7 views
7

का उपयोग कर योग्य डेटा मैं डेटा तालिका का उपयोग कर रहा हूं। मैं कुछ कॉलमों का योग करना चाहता हूं और मैं रिपोर्ट के नीचे दिखाना चाहता हूं। मैं कई चीजें खोजता हूं। फिर मुझे डेटा तालिका में नया पाद लेख कॉलबैक फ़ंक्शन मिला। मैंने इसका इस्तेमाल किया। लेकिन फिर भी मेरी उत्पादन अभी तक तैयार नहीं मेरे कोड इस प्रकार, है ..डेटा में कुछ पंक्तियों का योग कैसे करें footercallback

function Databind(Pdestroy) {debugger; 
    var destroy = false; 
    if (Pdestroy == "1") 
     destroy = true; 

    var oTable = $('.datatable').dataTable({ 
     "bJQueryUI": true, 
     'bServerSide': true, 
     "bDestroy": destroy, 
     "iDisplayLength": 10, 
     "sPaginationType": "full_numbers", 
     'sAjaxSource': '<%= Url.Action("listcount", "Home") %>', 
     "bFilter": true, 
     "aoColumnDefs": [{ 'bSortable': false, 'aTargets': [0, 1, 2, 7, 8, 9, 10, 11]}], 

     "fnRowCallback": function (nRow, aData, iDisplayIndex) { 
      var oSettings = oTable.fnSettings(); 
      $("td:first", nRow).html(oSettings._iDisplayStart + iDisplayIndex + 1); 
      return nRow; 
     }, 
     "footerCallback": function (row, aData, start, end, iDisplayIndex) { 
     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(4) 
      .data() 
      .reduce(function (a, b) { 
       return intVal(a) + intVal(b); 
      }); 

      // Total over this page 
      pageTotal = api.column(4, { 
       page: 'current' 
      }) 
      .data() 
      .reduce(function (a, b) { 
       return intVal(a) + intVal(b); 
      }, 0); 

      // Update footer 
      $(api.column(5).footer()).html(
      '$' + pageTotal + ' ($' + total + ' total)'); 
     } 
}); 
} 

यहाँ दिखा रहा है undefined.And भी कोई त्रुटि दिखाई दे रहा। लेकिन आउटपुट नहीं दिख रहा है। मैं उत्पादन के स्क्रीनशॉट ..

enter image description here

मूल्यों मैं क्या आगे की प्रक्रिया क्या करना चाहिए प्राप्त करने के लिए संलग्न है?

उत्तर

7

का उपयोग कैसे करें sum plugin का उपयोग करने के बजाय पहिया पुनर्रचना :)

jQuery.fn.dataTable.Api.register('sum()', function () { 
    return this.flatten().reduce(function (a, b) { 
     if (typeof a === 'string') { 
      a = a.replace(/[^\d.-]/g, '') * 1; 
     } 
     if (typeof b === 'string') { 
      b = b.replace(/[^\d.-]/g, '') * 1; 
     } 
     return a + b; 
    }, 0); 
}); 

आप केवल निश्चित पाद लेख स्तंभ प्रत्येक अद्यतन करना चाहते के बाद से समय सारणी को फिर से खींचा जाता है, आपको केवल एक साधारणकी आवश्यकता होती है 210:

drawCallback: function() { 
    var api = this.api(); 

    // Total over all pages 
    var total = api.column(4).data().sum(); 

    // Total over this page 
    var pageTotal = api.column(4, {page:'current'}).data().sum(); 

    $(api.column(5).footer()).html('$' + pageTotal + ' ($' + total + ' total)'); 
} 
3

@ डेविडकोनाड उत्तर मेरा से बेहतर है। मैं सिर्फ इसके उद्देश्य के लिए अपने उत्तर का उपयोग करने का सुझाव देता हूं।

इस कोड सीएसएस आदि जोड़ने

  1. आपकी तालिका में tfoot होना आवश्यक है उदाहरण के लिए कस्टम कार्यों के लिए इस्तेमाल किया जा सकता।
  2. आप संस्करण 1.10 में फ़ूटर कॉलबैक फ़ंक्शन fnFooterCallback का उपयोग कर सकते हैं।

"fnFooterCallback": function(nRow, aaData, iStart, iEnd, aiDisplay) { 
 
    //when working with pagination if you want to sum all records present in the current visible page only then use below if block 
 
    var iDisplayLength = parseInt(iEnd) - parseInt(iStart); 
 
    if (iStart != 0) { 
 
    iStart = iStart - iDisplayLength; 
 
    iEnd = aaData.length; 
 
    } 
 
    //columns start from 0, i took 1st column so the line --> aaData[aiDisplay[i]][1] 
 
    var iTarget = 0; 
 
    for (var i = iStart; i < iEnd; i++) { 
 
    iTarget += aaData[aiDisplay[i]][1] * 1; // because you get string in aaData[aiDisplay[i]][1] so multiplying with 1 gives number 
 
    } 
 
    // Modifying the footer row 
 
    var nCells = nRow.getElementsByTagName('th'); 
 
    nCells[1].innerHTML = parseInt(iTarget); 
 
}

+0

एनसील्स [1] .innerHTML = parseInt (iTarget) दिखा रहा है; 'अपरिभाषित' – PoliDev

+1

के आंतरिक आंतरिक HTML सेट नहीं कर सकते हैं संभावित कारण हैं 1. आपने tfoot 2 को परिभाषित नहीं किया है। आपने टीफुट के अंदर वें परिभाषित नहीं किया है। @PoliDev –

संबंधित मुद्दे