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>
<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>
После окончания пагинации.
Надеюсь, что это позволяет избежать головной боли заранее.
С наилучшими пожеланиями