2013-04-10 2 views
0

У меня есть jqGrid, что я настроить как этотjqGrid текста сортировка

gridAltMpn.jqGrid({ 
    autowidth: true, 
    shrinkToFit: true, 
    datatype : 'local', 
    data : input, 
    height : '100', 
    scrollrows: true, 
    scrollOffset : '0', 
    hidegrid : false, 
    colNames : [ 'P', 'MPN' ], 
    colModel : [ 
    { name : 'Col1', width : 30, align:'center' }, 
    { name : 'Col2', width : 250, sorttype: 'integer'} 
    ], 
    pager : '#altmpn_pager', 
    pagerpos : 'left', 
    scroll: 50, 
    gridview : true, 
    caption : 'A useful table title', 
    emptyRecordText : '<div id="no_data_msg" style="text-align:center"> No Results Found</div>', 
    hoverrows : true,  
    onSelectRow: function(id) { 
    var gsr = gridAltMpn.jqGrid('getGridParam', 'selrow'); 
    if (gsr) { 
     var rowData = gridAltMpn.jqGrid('getRowData', gsr); 
     if ($("input[name='optInvInqType']:checked").val() == 'MPN') { 
      getInvInq("MPN", rowData.MPN); 
     } 
    } 
    }, 
    loadComplete: function() { 
    gridAltMpn.setSelection(gridAltMpn.getDataIDs()[0], true); 
    } 
}); 

данных в этой сетке выглядит следующим образом

XX 774860A6     
    774860A8     
    774860A4     
    774860A3     
    774860A10     
    STARTER, PNEUM,PW4000 

Когда сетка сначала загружается, что он хорошо, но если пользователь хочет сортировать по второй колонке она заканчивается, как этот

774860A10     
    774860A3     
    774860A4     
XX 774860A6     
    774860A8     
    STARTER, PNEUM,PW4000  

774860A10 должен идти после 774860A8 так же, как в целое Сортировать. Я не могу использовать целочисленную сортировку, потому что это не целые числа, поскольку там есть некоторые альфа-символы. Другими словами, я хочу, чтобы текстовая запись сортировалась как целое. Нужно ли использовать обычную процедуру сортировки, а затем включить мой Javascript в целое число, подобное сортировке? Мне также не нужна эта сортировка в первый раз, потому что мой сервер сортирует ее по первому столбцу. Пользователь может захотеть, чтобы он отсортировался по второму столбцу.

ответ

1

Для этого типа сортировки вы должны использовать настраиваемую функцию.

Для этого задайте свойство типа сортировки jqgrid как пользовательскую функцию. Как указано в this link, тип сортировки может иметь следующие значения.

sorttype: 

int/integer - for sorting integer 
float/number/currency - for sorting decimal numbers 
date - for sorting date 
text - for text sorting 
function - defines a custom function for sorting. To this function we pass the value to be sorted and it should return a value too. 

И пользовательская функция может быть что-то вроде этого: (. Из this link нашел в ответе Олега для this question)

colModel: [ 

{name:'Posn', index:'Posn', width:100, sorttype: 

function(cell) 

{ 
//Here you have to apply your own logic 
if (cell=='GK') return '0';//returns the sort order 

if (cell=='DEF') return '1'; 

if (cell=='MID') return '2'; 

if (cell=='STR') return '3'; 

} 

}, 

Кстати, вы можете установить sortname свойство jqgrid в установите столбец для начальной сортировки времени загрузки.

+1

+1 Использование 'sorttype', определенного как функция, является правильным способом. Перед сравнением позиций столбца jqGrid позволяет * нормализовать * значения. Нормированные значения будут использоваться в операции сравнения во время выполнения алгоритма сортировки. «sorttype», определяемый как функция, выполняет нормализацию. [Ответ] (http://stackoverflow.com/a/5296935/315935) ближе к тому, чего хочет пользователь. Самая большая проблема заключается только в том, что пользователь не указал точно формат данных. В случае чистых данных HEX можно использовать 'parseInt (значение, 16)', но в случае наличия более сложных входных данных нормализация будет более сложной. – Oleg