Использование jqGrid 4.5.2. В моем наборе данных у меня есть столбец, который может содержать целые числа или текст. У меня есть sorttype
, установленный на text
.jqGrid - сортировка чисел и текст
Данные, которые возвращаются, будут перемешаны в сетке и могут содержать оба символа или цифры. Он может содержать только буквы, только цифры или их смесь. Если я нажимаю на колонке для сортировки в порядке убывания, он идет:
400
350
300
200
1100
1020
1010
1000
100
Цифры могут меняться, так же как буквы. Есть ли способ определить пользовательскую функцию sorttype, чтобы правильно сортировать число, подобное числу, и строку, подобную строке в том же столбце? Если да, то как?
Я нашел примеры, где использовался оператор типа CASE
, но поскольку содержимое ячеек не будет известно, я не могу этого сделать. Почитал бы любые мысли.
EDIT
основе @ ответ Олега, я попробовал несколько различных путей реализации sorttype
в виде функции. Однако я не могу заставить его стрелять. Он будет сортировать данные, но, похоже, сортирует все как строку. У меня есть несколько операторов console.log
в коде, которые должны выгружать любые значения, но не отображаются.
Первая попытка состояла в том, чтобы иметь функцию внутри colModel
.
{name:"MySource",
index:"MySource",
width:40,
align:"left",
sorttype: function (cell, rowObject) {
if (typeof cell === "string" && /^test(\d) + $/i.test(cell)) {
console.log("inside if custom sort - cell = " + cell);
return parseInt(cell);
}
else {
console.log("else - cell = " + cell);
return cell;
}
},
Вторая попытка была после того, как смотреть на другом примере кода вы имели на аналогичный вопрос и создать функцию & затем вызвать эту функцию из sorttype
.
Вот colModel
:
{name:"MySource",
index:"MySource",
width:40,
align:"left",
sorttype: function (cell) {
return myCustSort (cell) ;
}
}
}
и myCustSort
функция:
function myCustSort (myCell) {
if (typeof myCell === "string" && /^test(\d) + $/i.test(myCell)) {
console.log("inside if custom sort - cell = " + myCell);
return parseInt(myCell);
}
else {
console.log("else - cell = " + myCell);
return myCell;
}
} // end myCustSort
Когда я нажимаю на этот заголовок столбца, я могу видеть данные в сетке сортировки, но ни один из дисплеи помещают все в консольный журнал. Не должен ли он загореться &, если заголовок столбца щелкнут, чтобы отсортировать его, или я что-то упустил?
Спасибо!
@ oleg..can пожалуйста дайте sugesstion на this..when у вас есть time..i очень беспокоюсь о моей подход к mvc. http://stackoverflow.com/questions/20514446/how-to-call-model-methods-in-controller-in-asp-net-mvc –
@oleg - Я посмотрел на ваш пример, но у меня возникают проблемы с попыткой сделать он работает.Я не думаю, что он запускает функцию sorttype. Я отредактировал вопрос, чтобы показать, что я пытался. –
@steve_o: Вы не разместили код JavaScript, который создает сетку. Некоторые части кода могут быть очень важными. Вы писали: «Я не могу заставить его стрелять». Важно понимать, что 'sorttype' будет использоваться, только если вы используете ** сортировку на стороне клиента **. Если функция 'sorttype' вообще не называется, это означает, что вы, вероятно, используете' datatype: "json" или 'datatype:" json "', и вы не устанавливаете 'loadonce: true'. В случае, когда jqGrid просто отправляет имя сортировочного столбца и направление сортировки на сервер, и сервер отвечает за сортировку. Таким образом, вы должны выполнить сортировку кода сервера. – Oleg