Я создал небольшой скрипт, который удаляет и вставляет строку на первое место в сетке Kendo. Однако каждый раз, когда я заказываю какой-либо столбец, этот конкретный скрипт больше не работает, и после этого я не могу переместить ни одну строку. Я попытался снова прочитать dataSource, также попробовал обновить сетку, но ничего не произошло.
Вот моя функция скрипта (какая команда работает очень хорошо, прежде чем упорядочить столбец):
function onFetchItem(gridName) {
$("#errorMsg").text("");
var ids = gridName.split("_");
var item = $("#itemSearch_" + ids[1]).val();
var grid = $("#" + gridName).data("kendoGrid");
var data = grid.dataSource.data();
var dataItem = $.grep(data, function (d) {
if (d.Item == item.toUpperCase()) {
grid.dataSource.remove(d);
grid.dataSource.insert(0, d);
//grid.dataSource.read();
return d;
}
return null;
});
//grid.refresh();
if (dataItem[0] == null) {
$("#errorMsg").text("none");
}
}
Как я уже сказал, я снова попытался прочитать dataSource и обновить сетку, как вы можете видеть в моем комментированном коде. Когда я это делаю, элемент строки возвращается в исходное место, возможно, из-за того, что снова считывает dataSource. Как я могу перемещать позицию строки после действия orderby на сетке?
Я также создал небольшую игровую площадку, чтобы опробовать аналогичный код для моего:
Попробуйте, закажите по первому столбцу и убедитесь, что после этого я не могу переместить какую-либо запись.
Когда вы выполняете сортировку, этот вид по-прежнему применяется после remove
и insert
поэтому это не значит, что move
не работает, возникает вопрос, что вы все еще сортируете, а затем, похоже, это не работает.
Пример 1: я добавил столбец order
к данным, и у меня есть два элемента с одинаковым order
. Если вы упорядочиваете по order
, элемент "baz"
теперь второй, но если вы нажмете кнопку move
, он переместится в первую позицию, так как это возможно сперва, но все-таки упорядочено.
dataSource: [
{ order: 1, foo: "foo" },
{ order: 2, foo: "bar" },
{ order: 1, foo: "baz" }
],
Пример 2: В этом примере у вас одинаковый столбец order
но на этот раз элемент "baz"
имеет значение order
, которое не является минимальным. Здесь, если сортировка по order
а затем нажмите кнопку "Переместить", вы увидите, что "baz"
переходит к первому элементу с тем же значением order
.
dataSource: [
{ order: 1, foo: "foo" },
{ order: 2, foo: "bar" },
{ order: 2, foo: "baz" }
],
Пример 3: Но если вы хотите перенести его в первую позицию, вам нужно удалить заказ, вызвав grid.dataSource.sort({});
перед remove
и insert
.
function move(col) {
var item = "baz";
var grid = $("#grid").data("kendoGrid");
var data = grid.dataSource.data();
var dataItem = $.grep(data, function (d) {
if (d.foo == item) {
console.log(col);
grid.dataSource.sort({});
grid.dataSource.remove(d);
grid.dataSource.insert(0, d);
//grid.dataSource.read();
return d;
}
return false;
});
//grid.refresh();
}