2012-10-29 61 views
0

我有問題與jqGrid,當我想排序卡隆字符(š,ž,č,ć,đ,...,)。 我使用「caronCharacters」函數來代替那些caron與代碼... caronCharacters(data, sortableColumns[sortIndex], false);caronCharacters(data, sortableColumns[sortIndex], false);排隊是好的..但在這種情況下,我們沒有字裏面的卡隆,但一些「zxxx」代碼,而是...但是當我希望將這段代碼回卡隆字符的話,我有相同的結果,如果我沒有做任何事情...我假設觸發「reloadGrid」種種數據再次...希望你理解我......jqGrid caron sort

$('#sortAZ,#sortZA').click(function(){ 
    var order='asc'; 
    if ($(this).attr('id')=='sortZA'){ 
     var order='desc'; 
    } 
    if (sortIndex==''){ 
     return; 
    } 
    // change caron character into some code..like zž or zxxx 
    var data = $('#gridTable').jqGrid('getGridParam').data; 

    caronCharacters(data, sortableColumns[sortIndex], true); 
    jQuery("#gridTable").jqGrid('setGridParam',{sortname:sortableColumns[sortIndex],sortorder:order}); 

    // change code back to caron...if next line is in comment it works sorting, but no carons... 
    caronCharacters(data, sortableColumns[sortIndex], false); 
    jQuery("#gridTable").trigger('reloadGrid'); 
    $('#dropMenuFilter').hide(); 

    function caronCharacters(data, sortableColumn, direction){ 
     if(direction){ 
      for(var i in data){ 
       data[i][sortableColumn] = replaceCaron(data[i][sortableColumn]); 
       $('#gridTable').jqGrid('getLocalRow', i)[sortableColumn] = data[i][sortableColumn]; 
      } 
     } 
     else{ 
      for(var i in data){ 
       data[i][sortableColumn] = replaceCaronCode(data[i][sortableColumn]); 
       $('#gridTable').jqGrid('getLocalRow', i)[sortableColumn] = data[i][sortableColumn]; 
      } 
     } 
    } 
}); 

function replaceCaron(word){ 
    word = word.replace(/Č/g, "Cxxx"); 
    word = word.replace(/Ć/g, "Cxxx"); 
    word = word.replace(/Đ/g, "Dxxx"); 
    word = word.replace(/Š/g, "Sxxx"); 
    word = word.replace(/Ž/g, "Zxxx"); 
    word = word.replace(/č/g, "cxxx"); 
    word = word.replace(/ć/g, "cxxx"); 
    word = word.replace(/đ/g, "dxxx"); 
    word = word.replace(/š/g, "sxxx"); 
    word = word.replace(/ž/g, "zxxx"); 
    return word; 
} 

function replaceCaronCode(word){ 
    word = word.replace(/Cxxx/g, "Č"); 
    word = word.replace(/Cxxx/g, "Ć"); 
    word = word.replace(/Dxxx/g, "Đ"); 
    word = word.replace(/Sxxx/g, "Š"); 
    word = word.replace(/Zxxx/g, "Ž"); 
    word = word.replace(/cxxx/g, "č"); 
    word = word.replace(/cxxx/g, "ć"); 
    word = word.replace(/dxxx/g, "đ"); 
    word = word.replace(/sxxx/g, "š"); 
    word = word.replace(/zxxx/g, "ž"); 
    return word; 
} 
+0

你是否對'datatype:「local」'使用jqGrid,或者在'loadonce:true'中使用某種遠程數據類型(「json」或「xml」)?什麼是'#sortAZ'和'#sortZA''?通過點擊列標題進行標準排序是否與您的自定義排序規則相對應不是更好? – Oleg

+0

我使用遠程數據類型json。 是的,可能是更好的,但我不能使用souch排序...它不在設計中,我必須實現... – Clem

+0

如果您使用'datatype:「json」'*沒有*'loadonce:true',那麼所有的排序將在服務器端*上完成*。因此,不需要編寫任何其他JavaScript代碼,只需更改服務器代碼或在相應的SQL語句的ORDER BY部分中使用COLLATE部分(請參閱[here](http://msdn.microsoft.com/zh-cn/美國/庫/ ms188385.aspx#整理)例如) – Oleg

回答

1

據我糾正理解你的要求,你可以從兩個方面解決了一個問題:

  • 落實使用自定義排序定義爲功能。見the answer提供了一個例子。
  • 「子類」在比較或字符串期間由jqGrid使用的內部方法。對於相應的示例,請參見another answer
+0

謝謝,我會盡力做到這一點tomorow ...然後我會發布,如果它的工作。 再次感謝.. – Clem

+0

@Klemzy:不客氣! – Oleg