【问题标题】:jqGrid filter toolbar show search operator selector just for single columnjqGrid 过滤器工具栏仅显示单个列的搜索运算符选择器
【发布时间】:2013-07-16 01:51:17
【问题描述】:

我有很多列的 jqGrid 表。使用过滤器工具栏在网格中进行搜索。对于他们中的大多数人来说,搜索只是简单的默认运算符。对于一个日期时间列,我想要不同类型的运算符和日期选择器选择器。 我已将dataInit 日期选择器初始化添加到searchoptions,必要的运算符添加到searchoptions.sopt。为了显示这个运算符,我将 searchOperators 设置为 true。所以对于这个专栏,一切都很好。我有带有运算符选择器弹出窗口的日期选择器。但对于所有其他列,默认运算符图标显示在其左侧。这很烦人,因为运营商是默认的,用户无法更改它。那么是否有可能使用 jqGrid API 隐藏它们?据我所知,我只能使用我的自定义代码来隐藏它:

我需要检查我的列模型,并在渲染网格(可能在loadComplete)之后,为所有具有空soptsopt.length == 0 的列删除运算符选择器。或者添加隐藏它的 CSS 类。不确定这些解决方案中哪个更好(隐藏或删除),因为删除可能会破坏某些逻辑,并且隐藏可能会影响宽度计算。这是我在fiddle上的意思的示例

function fixSearchOperators()
{
    var columns = jQuery("#grid").jqGrid ('getGridParam', 'colModel');
    var gridContainer = $("#grid").parents(".ui-jqgrid");
    var filterToolbar = $("tr.ui-search-toolbar", gridContainer);

    filterToolbar.find("th").each(function()
    {
        var index = $(this).index();
        if(!(columns[index].searchoptions &&
             columns[index].searchoptions.sopt &&
             columns[index].searchoptions.sopt.length>1))
        {
            $(this).find(".ui-search-oper").hide();
        }
    });
}

有人有更好的想法吗?

【问题讨论】:

    标签: jqgrid jqgrid-asp.net


    【解决方案1】:

    我发现在每一列中定义搜索操作的可见性的想法非常好。来自我的 +1。

    我只建议你稍微改变一下选择搜索工具栏的哪些列将获得搜索操作的标准。在我看来,在searchoptions 中包含一些新属性似乎更自然。这样你就可以写出类似的东西

    searchoptions: {
        searchOperators: true,
        sopt: ["gt", "eq"],
        dataInit: function(elem) {
            $(elem).datepicker();
        }
    }
    

    我认为某些列,例如带有stype: "select" 的列,可能仍需要有sopt(至少sopt: ["eq"]),但人们不想看到此类列的搜索运算符。在这种情况下,在列级别指定搜索操作的可见性将非常实用。

    修改后的小提琴演示你可以找到here。我包含在来自the fix 的演示CSS 中(参见the answerthe corresponding bug report)。完整代码如下

    var dataArr = [
        {id:1, name: 'steven', surname: "sanderson", startdate:'06/30/2013'},
        {id:2, name: "valery", surname: "vitko", startdate: '07/27/2013'},
        {id:3, name: "John", surname: "Smith", startdate: '12/30/2012'}];
    
    function fixSearchOperators() {
        var $grid = $("#grid"),
            columns = $grid.jqGrid ('getGridParam', 'colModel'),
            filterToolbar = $($grid[0].grid.hDiv).find("tr.ui-search-toolbar");
    
        filterToolbar.find("th").each(function(index) {
            var $searchOper = $(this).find(".ui-search-oper");
            if (!(columns[index].searchoptions && columns[index].searchoptions.searchOperators)) {
                $searchOper.hide();
            }
        });
    }
    
    $("#grid").jqGrid({
        data: dataArr,
        datatype: "local",
        gridview: true,
        height: 'auto',
        hoverrows: false,
        colModel: [
            { name: 'id', width: 60, sorttype: "int"},
            { name: 'name', width: 70},
            { name: 'surname', width: 100},
            { name: 'startdate', sorttype: "date", width: 90,
                searchoptions: {
                    searchOperators: true,
                    sopt: ['gt', 'eq'],
                    dataInit: function(elem) {
                        $(elem).datepicker();
                    }
                },
                formatoptions: {
                    srcformat:'m/d/Y',
                    newformat:'m/d/Y'
                }
            }
        ]
    });
    
    $("#grid").jqGrid('filterToolbar', {
        searchOnEnter: false,
        ignoreCase: true,
        searchOperators: true
    });
    fixSearchOperators();
    

    显示和青春一样的结果:

    【讨论】:

      猜你喜欢
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 2013-05-21
      • 2015-05-29
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      相关资源
      最近更新 更多