How to disable search opertion for seleted column in jqGrid?

时光总嘲笑我的痴心妄想 提交于 2019-12-08 06:01:56

问题


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.

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
});

回答1:


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:

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);



回答2:


Use search:false in your colModel for columns you dont need searching.

UPDATE
You can customize the search option in your Grid by replacing searchoptions: with searchrules

searchrules:{custom:true, custom_func: fnc_myStringCheck }, search:true }   

Make sure the stype is text (though it is by default) and fnc_myStringCheck for your custom method. Hope this helps.




回答3:


static way:

colModel : [ 
                    {
                        name : 'sequenceId',
                        index : ' ',
                        search: false,
                        sortable : true,
                        classes: 'wrap'
                    }

dynamic way:

colModel : [ 
                    {
                        name : 'sequenceId',
                        index : ' ',
                        sortable : true,
                        classes: 'wrap',
                        formatter: disableSearch
                    }
function disableSearch(cellvalue, options, rowObject) {
    options.colModel.search = false;
    return cellvalue;
}


来源:https://stackoverflow.com/questions/25500284/how-to-disable-search-opertion-for-seleted-column-in-jqgrid

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!