DHTMLX: Фильтрация в колонке типа Subgrid, вложенной в Grid

DHTMLX: Фильтрация в колонке типа Subgrid, вложенной в Grid Наконец-то нашёл как сделать фильтрацию по значениям столбца типа Subgrid внутри основного Grid. Или, проще, фильтрацию значений в таблице, которая выпадает при клике в ячейке основной таблицы. Так как в этом столбце в базу сохраняются id элементов подключаемого grid, то и фильтрация велась именно по id, а не по отображаемым именам. Какашка. Но теперь мы её победили, йоу.

Для чего я это использую? Для нового приложения от Loco под названием Giorni ("Подарки на праздники"), там у меня есть поле друзей, которое заполняется из другой таблицы в базе, как раз благодаря выпадающей таблице. Также такую фильтрацию повесил и на поле - "подарки", что позволило вынести перечень подарков в отдельную таблицу (для будущего развития этого приложения!).

Привожу кусок кода:

// чтобы работал фильтр по subgrid в первой колонке (именам людей из таблицы people, а не по их id)!
grid_lines.attachEvent("onFilterStart",function(){
this.setColTypes("ro,grid,clist,ed,acheck,ed,ed,co");
return true;
})
grid_lines.attachEvent("onFilterEnd",function(){
this.setColTypes("grid,grid,clist,ed,acheck,ed,ed,co");
return true;
}) 

// чтобы работала сортировка по subgrid в первой колонке (именам людей из таблицы people, а не по их id)!
grid_lines.attachEvent("onBeforeSorting",function(){
this.setColTypes("ro,grid,clist,ed,acheck,ed,ed,co");
return true;
})
grid_lines.attachEvent("onAfterSorting",function(){
this.setColTypes("grid,grid,clist,ed,acheck,ed,ed,co");
return true;
})
//mygrid.enableSmartRendering(true,50);
grid_lines.setSubGrid(subgrid, 0, 0); // первый столбец с grid
grid_lines.setSubGrid(subgrid2, 1, 0); //2-й столбец с grid 
grid_lines.setSubGrid(subgrid3, 5, 0); //6-й столбец с grid - gifts! 
grid_lines.init(); 

Идея в обработчиках событий - в событии onFilterStart устанавливается тип первого столбца в "только для чтения" (ro), а потом, после фильтрации, возвращается назад в тип grid.

Тоже самое надо обязательно сделать и для сортировки по этому полю, чтобы не сортировалось по id. Для этого - прифигачим/приаттачим события onBeforeSorting и onAfterSorting.

Список всех Events можно увидеть здесь.

Вызывать их надо до инициализации вашего grid.

P.S. Подробнее о "Giorni" расскажу дальше, желающие смогут приобрести это приложение за небольшую плату для организации собственного контроля подарков (и не только) для друзей, либо посмотреть, что вытворяю с помощью интересной библиотеки DHTMLX.

Источник: loco.ru

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.




Комментарии (0)     Подпишитесь на RSS комментариев к этой статье.