Search code examples
jqueryjqgridjqgrid-php

How to disable search opertion for seleted column in jqGrid?


I have a five column(2 integer,3 String column) grid with column filter. i want search operations for integer values(greater,less,equal) its working fine, i don't want search operations for string column.

I am using back end search.

What am expecting is attached the model image as below please find it

i want search but i don't want search operations for String having columns

How to remove search operations in selected column. please help me.

enter image description here

jQuery("#list451").jqGrid({
    url: 'localset.php',
    datatype: "json",
    height: 255,
    width: 600,
    colNames: ['Index', 'Name', 'Code', 'N Name', 'C Name'],
    colModel: [{
            name: 'item_id',
            index: 'item_id',
            width: 65,
            sorttype: 'integer',
            searchoptions: {
                sopt: ['eq', 'ne', 'le', 'lt', 'gt', 'ge']
            }
        }, {
            name: 'name',
            index: 'name',
            width: 150,
            sorttype: 'string',
            searchoptions: {
                sopt: []
            }
        }, {
            name: 'code',
            index: 'code',
            width: 150,
            sorttype: 'string',
            searchoptions: {
                sopt: ['eq', 'bw', 'bn', 'cn', 'nc', 'ew', 'en']
            }
        }, {
            name: 'n_name',
            index: 'n_name',
            width: 150,
            sorttype: 'string',
            searchoptions: {
                sopt: []
            }
        }, {
            name: 'c_name',
            index: 'c_name',
            width: 150,
            sorttype: 'string',
            searchoptions: {
                sopt: []
            }
        },
        rowNum: 50,
        rowTotal: 200,
        rowList: [20, 30, 50],
        loadonce: true,
        mtype: "GET",
        rownumbers: true,
        rownumWidth: 40,
        gridview: true,
        pager: '#pager451',
        sortname: 'item_id',
        viewrecords: true,
        sortorder: "asc",
        caption: "Loading data from server at once"
    }); jQuery("#list451").jqGrid('filterToolbar', {
    searchOperators: true
});

Solution

  • I find your question very interesting and so I prepared the demo which shows how the problem can be solved. The results looks like on the picture below:

    enter image description here

    The current version of jqGrid support clearSearch which can be defined for every specific column, but it didn't support column specific searchOperators option. There are only searchOperators option of filterToolbar applied to all columns.

    The demo calls normalizeFilterToolbar function which hide the part of searching input with the searing operation for all columns where either new searchOperators: false option are used in the column definition or where only one operation are specified (for example is no sopt are defined in searchoptions or if no searchoptions at all are defined). The corresponding code looks

    var $grid = $("#list"), // the grid
        normalizeFilterToolbar = function () {
            var $self = this,
                colModel = $self.jqGrid("getGridParam", "colModel"),
                $searchToolbarColumns = $self.closest(".ui-jqgrid-view")
                    .find(">.ui-jqgrid-hdiv .ui-jqgrid-htable .ui-search-toolbar>.ui-th-column"),
                cCol = colModel.length,
                iCol,
                cm;
    
            for (iCol = 0; iCol < cCol; iCol++) {
                cm = colModel[iCol];
                if (cm.searchoptions == null ||
                        ((cm.searchoptions.sopt == null || cm.searchoptions.sopt.length === 1) && cm.searchoptions.searchOperators !== true) ||
                        (cm.searchoptions.searchOperators === false)) {
                    // hide the searching operation for the column
                    $($searchToolbarColumns[iCol]).find(">div>.ui-search-table .ui-search-oper").hide();
                }
            }
        };
    
    // create the grid
    $grid.jqGrid({
        // ... the options
    });
    
    $grid.jqGrid("filterToolbar", {searchOperators: true, defaultSearch: "cn"});
    normalizeFilterToolbar.call($grid);