2014-05-09 3 views
2

매김과 테이블 디스플레이 길이가 작동하지 않는 것 iTotalRecords 및 필터링 iTotalDisplayRecords를 사용하여 여기에JQuery와 datatables 필터링 매김

내 datatables JS 코드 : 내가 먼저 (단지 JSON을로드

transTable.dataTable({ 
    "aaSorting": [[0,"desc"]], 
    "sPaginationType": "full_numbers", 
    "bJQueryUI": true, 
    "aLengthMenu": [[10, 25, 50, 100, 200, -1], [10, 25, 50, 100, 200, "All"]], 
    "iDisplayLength": 10, 
    "bProcessing": true, 
    "bServerSide": true, 
    "sAjaxSource": "", 
    "sServerMethod": "POST" 
    "aoColumns": [ 
     { "mData": "datetime"}, 
     { "mData": "trans"}, 
     { "mData": "type"} 
    ] 
}); 

동일한 페이지로 POST), 페이지 매김은 정렬과 마찬가지로 올바르게 작동하고 표시됩니다. 내가 검색 상자를 사용하여 필터링 할 때 페이지 당 내 기본 디스플레이는 그러나 10

이며, 관련 POST의 PARAMS은 다음과 같습니다

{ ... 
    iDisplayStart: 0 
    iDisplayLength: 10 
    sSearch: searchText 
    ... 
} 

SQL 쿼리 실행은 다음과 같습니다

SELECT 
* 
FROM 
trans 
WHERE 
    (type LIKE "%searchText%") OR 
    (trans_id LIKE "%searchText%") OR 
    (datetime LIKE "%searchText%") 
ORDER BY "datetime" DESC 
LIMIT 10 -- 0 is iDisplayStart so no OFFEST set here and 10 is iDisplayLength 

내 JSON 응답은 다음과 같습니다.

{ 
    'aaData': [the query result rows], 
    'iTotalRecords: 10000, //total number of records in the table 
    'iTotalDisplayRecords: 10, 
    'sEcho': //POST params "sEcho" value 
} 

쿼리에 LIMIT 10이 있으므로 iTotalDisplayRecords는 10이됩니다.

페이지 매김은 "1,234 개의 레코드를 1에서 10까지 표시 (10,000에서 필터링 됨)하고 1,234 개의 레코드 (123 페이지)를 통해 페이지 매김을 허용한다고 생각합니다. 하지만. 그것은 말합니다 : "1에서 10의 레코드를 10,000으로 표시"페이지 매김 없음. 나는 iDisplayLength 제거하면

는 매김 텍스트는 올바른 외모와 페이지 매김 그러나 테이블이 단지 10

내가 잘못 뭘하지, 모두 1,234 기록을 표시하고, 제대로 작동?

답변

0

IIRC, iTotalDisplayRecords는 필터링 된 집합 (1,234)의 일부인 레코드 수 여야합니다.

데이터베이스의 총 레코드 수 (10,000)와 필터링 된 결과 수 (1,234)를 계산하기 위해 sql의 출력 매개 변수를 사용하여 페이지 매김 된 데이터 테이블을 설정 한 다음 데이터와 함께 내 json으로 전달합니다 그리기 수)를 각각 iTotalRecords 및 iTotalDisplayRecords로 나타냅니다.

Screenshot of implementation