Невозможно переместить строку после выполнения «OrderBy» в Kendo Grid

0

Я создал небольшой скрипт, который удаляет и вставляет строку на первое место в сетке 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 на сетке?

Я также создал небольшую игровую площадку, чтобы опробовать аналогичный код для моего:

http://jsbin.com/sazah/1/edit

Попробуйте, закажите по первому столбцу и убедитесь, что после этого я не могу переместить какую-либо запись.

Теги:
asp.net-mvc
kendo-ui
kendo-grid

1 ответ

1
Лучший ответ

Когда вы выполняете сортировку, этот вид по-прежнему применяется после 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();
}
  • 0
    Спасибо за ответ @ OneBai, который добился цели. Я на самом деле пошел с очисткой сортировки, как вы предложили, но я должен сказать, что было довольно умно создать значение заказа для списка. Спасибо еще раз :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню