2014-01-14 1 views
0

웹 페이지에서 jqGrid 4.5.3을 사용하면 텍스트 또는 숫자 일 수있는 데이터가 있습니다. 열에 사용자 지정 정렬 함수를 사용하고 있지만 정렬 할 것으로 예상되는 정렬 방식이 아닙니다.jqGrid - 사용자 정의 정렬 기능 - 숫자와 텍스트 모두 정렬하기

내가 그리드의 행에서 다음과 같은 데이터를 가지고, 이것은 그들이 전송되는 순서입니다 : 내가 동일한 데이터를 엑셀에 넣어과의 정렬 & 것을 가지고가는 경우에

123 
654 
321 
Test 
James 

(최소부터 최대까지) 순서는 다음과 같습니다

Test 
James 
654 
321 
123 
:

123 
321 
654 
James 
Test 

나는 가장 큰에서, 그것은 작은되는, Excel에서 다시 정렬 할 경우

내 jQgrid에서 순서에는 항상 텍스트가 먼저오고 그 다음에 숫자가옵니다. 둘 다 올바르게 정렬됩니다 (자체간에). 텍스트는 항상 눈금의 맨 위에 있습니다. 일종의 사용자 정의에 대한 코드 : 나는 사용자 지정 정렬 기능에 디스플레이를 했어

{name:"TestData", 
index:"TestData", 
width:30, 
align:"center", 
sorttype: function (cell, obj) { 
     return myCustSort (cell) ; 
     }, 
xmlmap:"Rowset>Row>TestData" 
}, 

, 그것은 정확하게 수치로 수치를 평가합니다

function myCustSort (myCell, rowObj) { 
    var n = myCell.length; 
    var intRegex = /^\d+$/ ; 
    var checkNumeric; 
    checkNumeric = intRegex.test(myCell); 
    if (typeof myCell === "string") { 
     if (checkNumeric === true) { 
      return parseInt(myCell); 
      } 
     else { 
      return myCell; 
      } 
     } 
    else { 
     return myCell; 
     } 
} // end myCustSort 

colModel 분류되는 컬럼입니다 및 문자열을 문자열로하지만 Excel에서 동일한 데이터와 동일한 방식으로 정렬 할 수는 없습니다.

jqGrid에 대한 사용자 지정 정렬 함수의 몇 가지 예제를 살펴 보았지만 해당 셀 데이터의 하위 문자열로 정렬되는 표 데이터에서 사용자 지정 정렬을 호출하고 있습니다. 정렬되는 데이터가 숫자와 텍스트의 혼합 인 것을 찾을 수 없었습니다.

이 열의 사용자 지정 정렬 기능에 뭔가 빠졌는지 알려주십시오. 감사!

답변

0

필자가 겪었던 문제를 해결할 수있었습니다 (텍스트는 항상 맨 위에 표시되고 다른 기괴한 정렬 결과). 한 번에 여러 가지 일들이 일어나기 시작했습니다. 그리드에서 데이터를 정렬하는 행동에 기여했다고 믿습니다.

첫 번째 문제는 그리드의 sortname에 있습니다. 처음에는 ID 번호로 정렬했습니다. 변경 과정에서 숨겨진 필드로 변경되었습니다. 스토어드 프로 시저와 코드를 모두 변경하여 SQL에서 데이터를 표시하고 그리드에서 정렬 가능한 날짜 - 시간 필드로 정렬했습니다. 이 한 가지 변화로 그리드가 그리드 내에서 동일한 수 (순서가 맞지 않음)를 가지게되었을 때 내가 얻었던 기괴한 종류가 해결되었습니다.

두 번째 변경 사항은 맞춤 정렬 기능입니다.

  • 그것은 4 자리 숫자가 될 수

    1. 그것은 3 자리 숫자가 될 수도 있고,
    2. 그것은 이름이 있거나 것 문자열이 될 수 있습니다 : 내 데이터는 세 가지 특성 중 하나 것 그것에있는 어떤 원본.

    I 함수 &에 표시를 넣을 수는 오른쪽 & 길이를 정확하게 계산하는 데이터의 특성을 해석 한 것을 알 수있다.

    I 다음 다시 쓴 다음과 같이 사용자 정의 정렬 기능 :

    function myCustSort (myCell, options, rowObj) { 
        var n = myCell.length; 
        var intRegex = /^\d+$/ ; 
        var checkNumeric; 
        checkNumeric = intRegex.test(myCell); 
        if (typeof myCell === "string") { 
         var myIntStr; 
         if (checkNumeric === true) { 
          if (n === 3) { 
           myIntStr = "0" + parseInt(myCell); 
           } 
          else { 
           myIntStr = "0" + parseInt(myCell); 
           myIntStr = myIntStr.substring(1); 
           } 
          } 
         else { 
          myIntStr = myCell; 
          } 
         return myIntStr; 
         } 
        else { 
         return myCell; 
         } 
    } // end myCustSort 
    

    을 그래서 지금, 숫자 (그래서 10 & 1000 모두 2 전에이없는이)이기 때문에 텍스트가 올바르게 정렬 . @Oleg에게 감사드립니다.이 주제에 대한 게시물을 여러 번 읽고 내 분류 기능에 문제가있는 것을 디버깅하려고 시도했습니다.

  • 0

    텍스트 값에 접두사가 있고 숫자가있는 경우 아래 사용자 정의 함수가 도움이됩니다.

    function myCustSort(myCell, options, rowObj) { 
    var n = myCell.length; 
    var intRegex = /^\d+$/; 
    var checkNumeric; 
    checkNumeric = intRegex.test(myCell); 
    if (typeof myCell === "string") { 
        var myIntStr; 
        if (checkNumeric === true) { 
    
         if (n === 9) { 
          myIntStr = "0" + parseInt(myCell); 
         } 
         else if (n === 8) { 
          myIntStr = "00" + parseInt(myCell); 
         } 
         else if (n === 7) { 
          myIntStr = "000" + parseInt(myCell); 
         } 
         else if (n === 6) { 
          myIntStr = "0000" + parseInt(myCell); 
         } 
         else if (n === 5) { 
          myIntStr = "00000" + parseInt(myCell); 
         } 
         else if (n === 4) { 
          myIntStr = "000000" + parseInt(myCell); 
         } 
         else if (n === 3) { 
          myIntStr = "0000000" + parseInt(myCell); 
         } 
         else if (n === 2) { 
          myIntStr = "00000000" + parseInt(myCell); 
         } 
         else { 
          myIntStr = "000000000" + parseInt(myCell); 
         } 
        } 
        else { 
    
         var isChecktype = myCell.indexOf("PREFIX"); 
         if (isChecktype <= -1) { 
          var odvalue = myCell.split('PREFIX'); 
          var odlength = odvalue[1].length; 
    
          if (odlength === 3) { 
           myIntStr = "PREFIX" + "0" + parseInt(odvalue[1]); 
          } 
          else if (odlength === 2) { 
           myIntStr = "PREFIX" + "00" + parseInt(odvalue[1]); 
          } 
          else { 
           myIntStr = "PREFIX" + "000" + parseInt(odvalue[1]); 
          } 
         } 
    
    
        } 
        return myIntStr; 
    } 
    else { 
    
        return myCell; 
    } 
    } 
    
    관련 문제