2017-12-28 2 views
1

동일한 행의 다른 열에있는 셀을 기반으로 일부 열의 조건부 합계를 수행하는 DataTable에 footerCallback을 구현하려고합니다.이 문제에 대해 도움을 줄 수있는 사람이 있습니까? ? 아래 코드를 사용하여 alert(cur_index);을 확인했지만 예상대로 작동하지 않는다고 생각합니다. 그리고 난 정확한 값의 합을 얻지 못했습니다. 내 코드는 다음과 같습니다.DataTables footerCallback - 다른 열 값의 조건부

pageTotal6 = api 
      .column(6, { page: 'current'}) 
      .data() 
      .reduce(function (a, b) { 
       var cur_index = api.column(6).data().indexOf(b); 
       alert(cur_index); 
       alert(api.column(3).data()[cur_index]); 
       if (api.column(3).data()[cur_index] != "Pending review") { 
        return parseInt(a) + parseInt(b); 
       } 
       else { return parseInt(a); } 
        return intVal(a) + intVal(b); 
      }, 0); 

3 번째 열에는 반복되는 값이 있으며 3 번째 열의 고유 값에만 합이 필요합니다. 데이터 테이블을 사용하여 이것을 어떻게 할 수 있습니까? & html

답변

1

이 두 가지 방법으로이 문제를 해결할 수 있습니다.

첫번째 방법
I 문제점을 해결하는 방법을 참조하여 아래와 같이 화상을 이용

(I는 C#으로 데이터베이스 [뷰 모델]에서 JSON 데이터를 판독하고, 서버 측 처리를 사용한다고 가정한다)

enter image description here

본인은 "양"열 합계 싶었던 "측정 유형"(마지막 열)! = 내 JSON 개체 목록을 통과 할 거라고 뷰 모델로 한 99 우선 추가했다. 열 합계 칼럼은 어떤 MeasureType = 99 행도 읽지 못했습니다.

본질적으로 JSON 개체에는 Amount 열 데이터를 읽는 두 개의 열이 있습니다. 하나는 이미지에 표시되고 다른 모든 표시는 내 바닥 글에 합치기 원하는 값만 읽는 것으로 표시됩니다.

while (MyDataReader.Read()) 
{ 
    //get all other columns 
    //column with amount figures measuretype != 99 
    if (reportData.q_measuretype != 99) 
    { 
     reportData.amountNo99 = Convert.ToDecimal(String.Format("{0:0.00}", read["q_amount"])); 
    } 
    else 
    { 
     reportData.amountNo99 = 0; 
    } 

    list.Add(reportData); 

}

그 단계를 수행 한 후 다음 footerCallback 함수 내 당신이 페이지에 행의 목록을 얻을 때 조건이 이미 설정되어 있기 때문에 그냥 눈에 보이지 않는 열을 합산하여 간단하게 할 수 있습니다

totalNettNo99 = api 
    .column(8, { page: 'current' }) //remember this is the last invisible column 
    .data() 
    .reduce(function (a, b) { 
     return intVal(a) + intVal(b); 
    }); 

그런 다음 볼 열 3에 그 합과 바닥 글을 업데이트 할 수 있습니다 (인덱스 2)

$(api.column(2).footer()).html(
    '€' + totalNettNo99.toFixed(2) 
); 
,691,363 (210)

는 이미지에서 볼 수 있듯이, 기네스 파인트 만 행이 바닥 글에 합계를 총 "columnDefs"

"ajax": { 
       "url": "/Reports/loadTransactionList", 
       "type": "POST", 
       "datatype": "JSON" 

      }, 

      "columnDefs": [ 

       { 
        "targets": [8], 
        "visible": false, 
        "searchable": false, 
        "render": false 
       } 
      ], 

      "columns": [ 
       { 
        "data": "convertDateToString" 
       }, 
       { 
        "data": "convertTimeToString" 
       }, 
       { 
        "data": "q_receiptnumber" 
       }, 

에 표시 안함 열이 방법을 설정해야합니다. 그것의 조금 더 타이핑하지만 당신이 스크립트 솔루션으로 머리를 찢어왔다면 문제를 해결합니다.

두 번째 방법은
당신은 여기에 내 솔루션

https://stackoverflow.com/a/42215009/7610106

신용 nkbved

에 스크립트와 적은 입력 순전히 수행이 답변에 모습을 가질 수
관련 문제