jqgrid colModel动态搜索选项

时间:2014-02-11 22:36:49

标签: javascript jquery search jqgrid

是否可以为jqgrid列提供动态(非硬编码)搜索过滤器值?

所以在例如:

 $('#my-grid').jqGrid({
            datatype: 'json',
            loadonce: true,
            jsonReader: common.jqgrid.jsonReader('Workorder'),
            mtype: 'POST',
            colNames: ['Project', 'PO Number', 'Type', 'Folder'],
            colModel: [
                { name: 'Project', index: 'Project', width: 80, sortable: false, search:false},
                { name: 'PONumber', index: 'PONumber', width: 60, sortable: false, search: true },
                { name: 'Type', index: 'Type', width: 60, sortable: false, search: true},
                { name: 'Folder', index: 'Folder', width: 60, sortable: false, search: false },
                           ],
            scroll: true,
                   });

我希望该类型具有一个下拉过滤器,其值是来自数据子集的不同值的数组。

我将如何实现这一目标?

编辑添加:

是直接可访问的jqgrid数据吗?我正在寻找类似的东西 Data.Cols[2].Distinct将从第3列(在本例中)中提供不同的值数组。这有可能吗?

谢谢。

已更新 这是代码:

onLoadComplete: function (data) {
        var $this = $('#gridReport');

        if ($this.jqGrid("getGridParam", "datatype") === "json") {

            // first loading from the server
            // one can construct now DISTINCT for 'Type' column and
            // set searchoptions.value
            $this.jqGrid("setColProp", "Type", {
                stype: "select",
                searchoptions: {
                    value: buildSearchSelect(getUniqueNames("Type")),
                    sopt: ["eq", "ne"]

                }
            });            
        }
    },

2 个答案:

答案 0 :(得分:2)

我不确定我是否理解正确。您可能希望使用带有下拉列表(stype: 'select')的高级搜索对话框,其中包含网格的3维列的不同值?我建议你阅读the answer,其中显示了如何动态设置searchoptions.value的主要思路。您使用loadonce: true。因此,您可以在服务器首次加载数据时调用setColProp 内的loadComplete。您可以对datatype的值进行其他测试。在从服务器加载时,值为"json"。稍后它将更改为"local"。所以代码可以是以下内容:

loadComplete: function () {
    var $this = $(this);

    if ($this.jqGrid("getGridParam", "datatype") === "json") {
        // first loading from the server
        // one can construct now DISTINCT for 'Type' column and
        // set searchoptions.value
        $this.jqGrid("setColProp", "Type", {
            stype: "select",
            searchoptions: {
                value: buildSearchSelect(getUniqueNames("Type")),
                sopt: ["eq", "ne"]
            }
        });
    }
}

答案 1 :(得分:0)

这就是我最终做到的方式,我最终使用jquery直接填充下拉列表,因为jqgrid过滤器在任何时候都不可用(如果它们是,我很乐意看到一个记录的示例):

 onLoadComplete: function (data) {

        if ($('#mygrid').jqGrid("getGridParam", "datatype") === "json") {

            //get the distinct types from the data set coming back
            var length = data.length;
            var types = [];

            for (var i = 0; i < length; i++) {
                types.push(data[i]['Type']);
            }

            var uniqueTypes = getUnique(types);

            $('#gridId select[name="Type"]').empty().html('<option value="">All</option>');

            for (var i = 0; i < uniqueTypes.length; i++) {
                  $('#gridId select[name="Type"]').append($('<option value="' + uniqueTypes[i] + '">' + uniqueTypes[i] + '</option>'));
            }
        }