DHTMLX - После разбиения на страницы, нажмите на Grid перенаправляет на страницу 1

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

Например: когда я нахожусь на странице 2, когда я нажимаю на строку сетки на странице 2, она возвращается на страницу 1.

grid.js

var per_page = 50;
var $spinner_el = $("#spinnerDiv");   
feedgrid = new dhtmlXGridObject('grid-region');
feedgrid.setImagePath('../../../../static/styles/vendor/dhtmlx/imgs/');
feedgrid.setSkin("dhx_web");
feedgrid.setHeader(["ID","Name","date"]);                 
feedgrid.setColumnIds("id,name,createdDate");
feedgrid.setColTypes("txt,txt,txt");
feedgrid.enableAutoHeight(true);
feedgrid.enableAutoWidth(true);
feedgrid.setEditable(false);
feedgrid.enablePaging(true, per_page, per_page, "pagingArea", true, "infoArea");
feedgrid.setPagingSkin("toolbar", "dhx_web");
feedgrid.init();
feedgrid.load("/getdata", "js");

feedgrid.entBox.onselectstart = function () {
   return true;
};

feedgrid.attachEvent("onXLS", function () {
   spinUtil.on($spinner_el);
});

feedgrid.attachEvent("onXLE", function () {
  spinUtil.off($spinner_el);
  resizeGrid();
});

feedgrid.attachEvent("onRowInserted", function (rId) {
  feedgrid.adjustColumnSize(0);
  feedgrid.adjustColumnSize(1);
  feedgrid.adjustColumnSize(2);
});

feedgrid.attachEvent("onResizeEnd", function (cInd, cWidth, obj) {
  resizeGrid();
});

feedgrid.attachEvent("onPageChanged", function (ind, fInd, lInd) {
  resizeGrid();
});

HTML

    <div id='grid-region'></div>
    <div class="loading-image" id="table-ajax-loader"></div>
    <div class="paginate-head">
        <div id="pagingArea"></div>
        &nbsp;
        <div id="infoArea"></div>
    </div>

Не уверен, что не так.

2 ответа

Решение

Я должен был переопределить onBeforeSelect Событие DHTMLX для отключения перенаправления на страницу 1,

ingestionGrid.attachEvent("onBeforeSelect", function(new_row,old_row,new_col_index){
    //alert(new_row);
});

Я знаю, что этот пост старый, но у меня была такая же проблема с нумерацией DHTMLXGrid. Я думал, что это ошибка в библиотеке, но сегодня утром я обнаружил проблему.

Конечно, если у вас есть некоторые атрибуты в ваших XML-узлах данных, такие как id или что-то подобное, значение этих атрибутов ДОЛЖНО БЫТЬ упорядоченным и последовательным в каждом асинхронном запросе, который вы делаете из сетки. В другом случае сетка злится (и разработчик тоже). Если вы не можете заказать, то удалите любые атрибуты из узлов.

Например:

Представьте, что я возвращаю этот xml в сетку со стороны сервера:

<?xml version="1.0" encoding="ISO-8859-15"?>
<rows pos="0" total_count="40">
   <row id="1">
       <cell>...</cell>
       <cell>...</cell>
        ...
       <cell>...</cell>
   </row>
   <row id="2">
       <cell>...</cell>
       <cell>...</cell>
        ...
       <cell>...</cell>
   </row>
   ...
   <row id="n">
       <cell>...</cell>
       <cell>...</cell>
        ...
       <cell>...</cell>
   </row>
</rows>

Если в следующем асинхронном запросе (pagin) вы повторите ту же нумерацию идентификатора атрибута (от 1 до n), когда вы выберете строку в сетке, сетка вернется на первую страницу (событие onRowSelect будет запустить событие onBeforePageChanged).

Хорошим способом является сохранение параметра на стороне сервера, который хранит первую позицию страницы, а затем, используя это значение, для построения xml. Вы можете получить доступ к этим данным из JavaScript, используя эти методы:

position_start = (grid.currentPage - 1) * grid.rowsBufferOutSize;

и затем увеличивает значение в каждой итерации для атрибута 'id' при создании xml ответа.

Обратите внимание на значение атрибута id из предыдущего примера (для блоков по 15 результатов в каждом запросе):

первый асинхронный запрос:

<?xml version="1.0" encoding="ISO-8859-15"?>
<rows pos="0" total_count="40">
   <row id="1">
       <cell>...</cell>
       <cell>...</cell>
        ...
       <cell>...</cell>
   </row>
   <row id="2">
       <cell>...</cell>
       <cell>...</cell>
        ...
       <cell>...</cell>
   </row>
   ...
   <row id="15">
       <cell>...</cell>
       <cell>...</cell>
        ...
       <cell>...</cell>
   </row>
</rows>

В следующем асинхронном запросе:

<?xml version="1.0" encoding="ISO-8859-15"?>
<rows pos="0" total_count="40">
   <row id="16">
       <cell>...</cell>
       <cell>...</cell>
        ...
       <cell>...</cell>
   </row>
   <row id="17">
       <cell>...</cell>
       <cell>...</cell>
        ...
       <cell>...</cell>
   </row>
   ...
   <row id="30">
       <cell>...</cell>
       <cell>...</cell>
        ...
       <cell>...</cell>
   </row>
</rows>

После окончания пагинации.

Надеюсь, что это позволяет избежать головной боли заранее.

С наилучшими пожеланиями

Другие вопросы по тегам