Панель инструментов jqgrid toggle filter с замороженным столбцом не работает

Я видел следующую демонстрацию с замороженным столбцом и панелью инструментов фильтра здесь: http://www.ok-soft-gmbh.com/jqGrid/FrozenColumns.htm

Теперь для того же примера я хочу реализовать функцию переключения, которая была доступна в демоверсии: http://www.ok-soft-gmbh.com/jqGrid/SimpleLocalGridWithSearchingToolbar1.htm

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


Я попытался загрузить последний код jqgrid с github и попытался воспроизвести демонстрацию следующим образом (как вы сказали, проблема была исправлена, я думал, что функции Frozendiv, fixGBoxHeight в демонстрации, которые вы мне показывали ранее, не нужны, т.е. http://www.ok-soft-gmbh.com/jqGrid/FrozenColumnsAndFilterToggle.htm)

    $grid.jqGrid({
        datatype: 'local',
        data: mydata,
        colNames: [/*'Id', */'Client', 'Date', 'Amount', 'Tax', 'Total', 'Closed', 'Shipped via', 'Notes'],
        colModel: [
            //{name: 'id', index: 'id', width: 45, align: 'center', sorttype: 'int', frozen: true},
            {name: 'name', index: 'name', width: 70, editable: true, frozen: true},
            {name: 'invdate', index: 'invdate', width: 80, align: 'center', sorttype: 'date',
                formatter: 'date', formatoptions: {newformat: 'm/d/Y'}, datefmt: 'm/d/Y'},
            {name: 'amount', index: 'amount', width: 75, formatter: 'number', align: 'right', editable: true},
            {name: 'tax', index: 'tax', width: 50, formatter: 'number',
                formatoptions: {decimalSeparator: ".", thousandsSeparator: " ", decimalPlaces: 4, defaultValue: '0.0000'},
                align: 'right', editable: true, editoptions: {readonly: true}},
            {name: 'total', index: 'total', width: 60, formatter: 'number', align: 'right', editable: true},
            {name: 'closed', index: 'closed', width: 70, align: 'center', editable: true,
                formatter: 'checkbox', edittype: 'checkbox', editoptions: {value: 'Yes:No', defaultValue: 'Yes'}},
            {name: 'ship_via', index: 'ship_via', width: 100, align: 'center', formatter: 'select', editable: true,
                edittype: 'select', editoptions: {value: 'FE:FedEx;TN:TNT;IN:Intim', defaultValue: 'Intime'}},
            {name: 'note', index: 'note', width: 70, sortable: false, editable: true}
        ],
        rowNum: 10,
        rowList: [5, 10, 20],
        pager: '#pager',
        gridview: true,
        rownumbers: true,
        sortname: 'invdate',
        viewrecords: true,
        sortorder: 'desc',
        caption: 'Frozen columns with dynamic shown filter toolbar',
        height: '100%',
        shrinkToFit: false,
        width: 550,
        resizeStop: function () {
            /*resizeColumnHeader.call(this);
            fixPositionsOfFrozenDivs.call(this);
            fixGboxHeight.call(this);*/
        },
        loadComplete: function () {
            //fixPositionsOfFrozenDivs.call(this);
        }
    });
    $grid.jqGrid('navGrid', '#pager', {add: false, edit: false, del: false}, {}, {}, {},
        {multipleSearch: true, overlay: 0});
    $grid.jqGrid('filterToolbar', {stringResult: true, searchOnEnter: true, defaultSearch: 'cn'});
    $grid.jqGrid('navButtonAdd', '#pager', {
        caption: "Filter",
        title: "Toggle Searching Toolbar",
        buttonicon: 'ui-icon-pin-s',
        onClickButton: function () {
            this.toggleToolbar();
            /*if ($.isFunction(this.p._complete)) {
                if ($('.ui-search-toolbar', this.grid.hDiv).is(':visible')) {
                    $('.ui-search-toolbar', this.grid.fhDiv).show();
                } else {
                    $('.ui-search-toolbar', this.grid.fhDiv).hide();
                }
                this.p._complete.call(this);
                fixPositionsOfFrozenDivs.call(this);
            }*/
        }
    });
    $grid[0].toggleToolbar();
    /*$grid.jqGrid('gridResize', {
        minWidth: 450,
        stop: function () {
            fixPositionsOfFrozenDivs.call($grid[0]);
            fixGboxHeight.call($grid[0]);
        }
    });
    resizeColumnHeader.call($grid);*/
    $grid.jqGrid('setFrozenColumns');
    /*$grid.p._complete.call($grid);
    fixPositionsOfFrozenDivs.call($grid);*/
});

Но все же код не будет работать, и панель инструментов фильтра не работает, как в вашей предыдущей демонстрации (http://www.ok-soft-gmbh.com/jqGrid/FrozenColumnsAndFilterToggle.htm).


person Rohini Kumar    schedule 23.01.2012    source источник


Ответы (1)


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

Ты прав. Текущая реализация закрепленных столбцов имеет проблемы с динамическим отображением или сокрытием панели инструментов поиска. Я интерпретирую это как ошибку в toggleToolbar.

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

$grid.jqGrid('filterToolbar', {stringResult: true, searchOnEnter: true, defaultSearch: 'cn'});
$grid.jqGrid('navButtonAdd', '#pager', {
    caption: "Filter",
    title: "Toggle Searching Toolbar",
    buttonicon: 'ui-icon-pin-s',
    onClickButton: function () {
        this.toggleToolbar();
        if ($.isFunction(this.p._complete)) {
            if ($('.ui-search-toolbar', this.grid.hDiv).is(':visible')) {
                $('.ui-search-toolbar', this.grid.fhDiv).show();
            } else {
                $('.ui-search-toolbar', this.grid.fhDiv).hide();
            }
            this.p._complete.call(this);
            fixPositionsOfFrozenDivs.call(this);
        }
    }
});
$grid[0].toggleToolbar();
person Oleg    schedule 23.01.2012
comment
Спасибо олег.. Извините за задержку с ответом. но это именно то, что я ищу. Одно сомнение в том, что если у меня есть несколько сеток на странице, то можно ли переместить 3 функции, т.е. ‹code›resizeColumnHeader, fixPositionsOfFrozenDivs, fixGboxHeight ‹/code› в общий блок так что я могу использовать их для всех сеток.. - person Rohini Kumar; 25.01.2012
comment
@user109124: Да, конечно. Вы также можете исправить ошибка, которая уже исправлена в основном коде jqGrid. - person Oleg; 25.01.2012
comment
@Oleg, как этого же можно добиться при загрузке сетки, поскольку я указываю search = true в своей colModel. - person Vikas; 20.04.2017
comment
@Викас: я не понимаю, что ты имеешь в виду. Прежде всего, какую версию jqGrid вы используете (можете использовать) и из какого форка jqGrid (бесплатный jqGrid, коммерческий JS Guriddo jqGrid или старый jqGrid версии ‹=4.7). Я разрабатываю бесплатную вилку jqGrid, и проблема с замороженными столбцами, описанная в вопросе, не должна существовать в вилке. - person Oleg; 20.04.2017
comment
версия jqGrid 4.9.2, freejqgrid, поэтому, когда я передаю search = true в объекте colmodel, и если этот столбец заморожен, текстовое поле ввода поиска не появляется. - person Vikas; 20.04.2017
comment
@Vikas: Текущая версия бесплатной jqGrid — 4.14.0. Вы должны перейти на него в первую очередь. - person Oleg; 20.04.2017
comment
@Vikas: Когда говорят о каком-то продукте, имеют в виду последнюю версию или, по крайней мере, предыдущую. Другие ретро-версии не поддерживаются. Например, если вы используете Google Chrome, вам нужно использовать версию 58 или 57. Версия будет меняться каждые 1,5-2 месяца. Есть некоторые исключения для коммерческих продуктов, но большинство бесплатных продуктов с открытым исходным кодом следуют правилу: следует использовать последнюю версию. - person Oleg; 20.04.2017
comment
@Oleg Мне придется придерживаться более старой версии jqgrid, так как она должна работать и в более старом браузере. - person Vikas; 20.04.2017
comment
@Vikas: И 4.14.0, и 4.9.2 должны работать в одних и тех же веб-браузерах. Какой веб-браузер и в какой именно версии вы имеете в виду? Если вы обнаружите какую-то проблему в последней версии 4.14.0, я могу попытаться ее исправить. Если вы хотите сохранить старую версию, вам не следует использовать новые функции. Между прочим, я переписал многие части jqGrid, чтобы лучше поддерживать замороженные столбцы и существенно повысить его производительность. - person Oleg; 20.04.2017