:: Forum >> Version 1 >>

switch statement in setDataProperty cause wrong sorting result

in the below function, if I use if statement, it will have no problem, both the value property and sorting works fine. But once I change to switch statement, the value property is also set correctly, but when I sort the column, the items are not in order. Any ideas?

obj.setDataProperty("value", function(i,j){ 
    var 
strTemp myData[i][j];
    var 
strResult strTemp;
/*
    if (j==1) {
        //    string
        if (strTemp == '-') strResult = maxNegStr;
    } else if (j==17) {
        //    string date
        if (strTemp == '-') strResult = maxNeg
        else {
            var arrDate = strTemp.split("-");
            var exDivDate = new Date( arrDate[2], arrDate[1] - 1, arrDate[0] );
            var now = new Date();
            strResult = Math.round((exDivDate.getTime() - now.getTime()) / 86400) / 1000;
        }    
    } else if (j==18) {
        //    number << better
        if (strTemp == '-') strResult = maxPos;
    } else if (j==21 || j==22) {
        //    number with suffix
        if (strTemp == '-') strResult = maxNeg
        else {
            switch (strTemp.substring(strTemp.length-1, strTemp.length)) {
                case 'k':
                    strResult = strTemp.slice(0, -1) * 1000;
                    break;
                case 'M':
                    strResult = strTemp.slice(0, -1) * 1000000;
                    break;
                case 'G':
                    strResult = strTemp.slice(0, -1) * 1000000000;
                    break;
                case 'T':
                    strResult = strTemp.slice(0, -1) * 1000000000000;
                    break;
                default:
                    strResult = strTemp.slice(0, -1);
            }
        }
    } else {
        //    number
        if (strTemp == '-') strResult = maxNeg;
        var text = "" + this.getDataText(i, j);
        if (text.match(/^\s*$/)) strResult = maxNeg;
        var value = Number(text.replace(/[ ,%\$]/gi, "").replace(/\((.*)\)/, "-$1"));
        if (isNaN(value)) {
            strResult = maxNeg;
        } else {
            strResult = value;
        }
    }
*/
switch (j) {
    case 
1:
    case 
16:
    case 
23:
    case 
24:
        
//    string
        
if (strTemp == '-'strResult maxNegStr;
        break;
    case 
17:
        
//    string date
        
if (strTemp == '-'strResult maxNeg
        
else {
            var 
arrDate strTemp.split("-");
            var 
exDivDate = new DatearrDate[2], arrDate[1] - 1arrDate[0] );
            var 
now = new Date();
            
strResult Math.round((exDivDate.getTime() - now.getTime()) / 86400) / 1000;
        }
        break;
    case 
18:
        
//    number << better
        
if (strTemp == '-'strResult maxPos;
        break;
    case 
21:
    case 
22:
        
//    number with suffix
        
if (strTemp == '-'strResult maxNeg
        
else {
            switch (
strTemp.substring(strTemp.length-1strTemp.length)) {
                case 
'k':
                    
strResult strTemp.slice(0, -1) * 1000;
                    break;
                case 
'M':
                    
strResult strTemp.slice(0, -1) * 1000000;
                    break;
                case 
'G':
                    
strResult strTemp.slice(0, -1) * 1000000000;
                    break;
                case 
'T':
                    
strResult strTemp.slice(0, -1) * 1000000000000;
                    break;
                default:
                    
strResult strTemp.slice(0, -1);
            }
        }
        break;
    default:
        
//    number
        
if (strTemp == '-'strResult maxNeg;
        var 
text "" this.getDataText(ij);
        if (
text.match(/^\s*$/)) strResult "";
        var 
value Number(text.replace(/[ ,%\$]/gi"").replace(/\((.*)\)/, "-$1"));
        var 
value Number(text);
        if (
isNaN(value)) {
            
strResult maxNeg;
        } else {
            
strResult value;
        }
}

    return 
formats[j].dataToValue(strResult);
});
 
Henry Ng
Monday, September 13, 2004
please ignore the previous coding, here is the updated one, but still have the problem.
obj.setDataProperty("value", function(i,j){ 
    var 
strTemp myData[i][j];
    var 
strResult strTemp;
/*
    if (j==1 || j==16 || j==23) {
        //    string
        if (strTemp == '-') strResult = maxNegStr;
    } else if (j==17) {
        //    string date
        if (strTemp == '-') strResult = maxNeg
        else {
            var arrDate = strTemp.split("-");
            var exDivDate = new Date( arrDate[2], arrDate[1] - 1, arrDate[0] );
            var now = new Date();
            strResult = Math.round((exDivDate.getTime() - now.getTime()) / 86400) / 1000;
        }    
    } else if (j==18) {
        //    number << better
        if (strTemp == '-') strResult = maxPos;
    } else if (j==21 || j==22) {
        //    number with suffix
        if (strTemp == '-') strResult = maxNeg
        else {
            switch (strTemp.substring(strTemp.length-1, strTemp.length)) {
                case 'k':
                    strResult = strTemp.slice(0, -1) * 1000;
                    break;
                case 'M':
                    strResult = strTemp.slice(0, -1) * 1000000;
                    break;
                case 'G':
                    strResult = strTemp.slice(0, -1) * 1000000000;
                    break;
                case 'T':
                    strResult = strTemp.slice(0, -1) * 1000000000000;
                    break;
                default:
                    strResult = strTemp.slice(0, -1);
            }
        }
    } else {
        //    number
        if (strTemp == '-') strResult = maxNeg;
        var text = "" + this.getDataText(i, j);
        if (text.match(/^\s*$/)) strResult = maxNeg;
        var value = Number(text.replace(/[ ,%\$]/gi, "").replace(/\((.*)\)/, "-$1"));
        if (isNaN(value)) {
            strResult = maxNeg;
        } else {
            strResult = value;
        }
    }
*/
switch (j) {
    case 
1:
    case 
16:
    case 
23:
        
//    string
        
if (strTemp == '-'strResult maxNegStr;
        break;
    case 
17:
        
//    string date
        
if (strTemp == '-'strResult maxNeg
        
else {
            var 
arrDate strTemp.split("-");
            var 
exDivDate = new DatearrDate[2], arrDate[1] - 1arrDate[0] );
            var 
now = new Date();
            
strResult Math.round((exDivDate.getTime() - now.getTime()) / 86400) / 1000;
        }
        break;
    case 
18:
        
//    number << better
        
if (strTemp == '-'strResult maxPos;
        break;
    case 
21:
    case 
22:
        
//    number with suffix
        
if (strTemp == '-'strResult maxNeg
        
else {
            switch (
strTemp.substring(strTemp.length-1strTemp.length)) {
                case 
'k':
                    
strResult strTemp.slice(0, -1) * 1000;
                    break;
                case 
'M':
                    
strResult strTemp.slice(0, -1) * 1000000;
                    break;
                case 
'G':
                    
strResult strTemp.slice(0, -1) * 1000000000;
                    break;
                case 
'T':
                    
strResult strTemp.slice(0, -1) * 1000000000000;
                    break;
                default:
                    
strResult strTemp.slice(0, -1);
            }
        }
        break;
    default:
        
//    number
        
if (strTemp == '-'strResult maxNeg;
        var 
text "" this.getDataText(ij);
        if (
text.match(/^\s*$/)) strResult "";
        var 
value Number(text.replace(/[ ,%\$]/gi"").replace(/\((.*)\)/, "-$1"));
        if (
isNaN(value)) {
            
strResult maxNeg;
        } else {
            
strResult value;
        }
}

    return 
formats[j].dataToValue(strResult);
});
 
Henry Ng
Monday, September 13, 2004



This topic is archived.

Back to support forum

Forum search