Восстановите значки сортировки в шапке после перезагрузки сетки - PullRequest
1 голос
/ 24 февраля 2020

Сетки в нашем приложении позволяют пользователям сортировать по нескольким столбцам. Сейчас я реализую функцию «Избранное», чтобы легко запомнить и восстановить фильтр, порядок и порядок столбцов. Я сталкиваюсь с некоторыми проблемами для правильного обновления sh значков сортировки в заголовке таблицы.

Код выглядит примерно так:

thegrid.setGridParam({
  sortname: favorite_to_restore["sidx"],
  sortorder: favorite_to_restore["sord"]
  });
thegrid.trigger('reloadGrid');

Это работает правильно в бэкэнде (ie порядок сортировки для запроса sql в нашей базе данных отражает избранное), но значки в строке заголовка не обновляются.

Можно ли выполнить дополнительный вызов API для обновления значков сортировки? Я посмотрел в "sortGrid", но это не дает простого ответа.

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

Вы можете попытаться восстановить пользовательские настройки до создания сетки. См. демо , созданное для ответа . В этом случае вам вообще не нужно будет перезагружать сетку.

В качестве альтернативы вы можете использовать sortData метод элемента DOM сетки. Демо https://jsfiddle.net/OlegKi/1gpz4mat/ использует следующий код для вызова:

$("#reload").click(function () {
    var $grid = $("#grid"),
        p = $grid.jqGrid("getGridParam"),
        newSortName = "amount",
        newSortOrder = "asc", // "asc", "desc"
        iCol = p.iColByName[newSortName],
        $th = $("#" + p.id + "_" + newSortName);

    $grid[0].sortData(newSortName, iCol, false, newSortOrder, $th[0]);
});
0 голосов
/ 26 февраля 2020

Я использовал следующий код:

        // From the favorite to restore I retrieve the fields to sort on
        var sortstring= "field 1 asc, field2 desc".split(",");

        // Reset the sort icons
        var p = thegrid.jqGrid('getGridParam');     
        for (var k of p.colModel) {
            var headercell = $("#" + p.id + "_" + k["name"]);
            headercell.find("span.s-ico").css("display","none");
            headercell.find("span.ui-grid-ico-sort").addClass("disabled");
            headercell.find("span.ui-jqgrid-sort-order").html(" ");
            k.lso = "";
        }

        // Update the sort icons
        for (var k in sortstring) {
            var s = sortstring[k].trim().split(" ");
            var colname = s[0].trim();
            var headercell = $("#" + p.id + "_" + colname);
            headercell.find("span.s-ico").css("display","");
            if (s[1].trim() == "asc") {
              headercell.find("span.ui-icon-asc").removeClass("disabled");
              p.colModel[p.iColByName[colname]].lso = "asc-desc";
            }
            else {
              headercell.find("span.ui-icon-desc").removeClass("disabled");
              p.colModel[p.iColByName[colname]].lso = "desc-asc";
            }
          headercell.find("span.ui-jqgrid-sort-order").html(parseInt(k)+1);
        }
...