jqGrid multiplesearch - 如何为每一行添加和/或列?

Posted

技术标签:

【中文标题】jqGrid multiplesearch - 如何为每一行添加和/或列?【英文标题】:jqGrid multiplesearch - How do I add and/or column for each row? 【发布时间】:2012-10-20 19:24:29 【问题描述】:

我有一个 jqGrid 多重搜索对话框,如下所示:

(注意每行中的第一个空 td)。

我想要的是这样的搜索网格(如下),其中:

    第一个 td 相应地用“和/或”填充。 相应的搜索过滤器也是这样构建的。

默认情况下空的 td 在那里,所以我假设这是我可以打开的标准 jqGrid 功能,但我似乎无法在文档中找到它。

我的代码如下所示:

<script type="text/javascript">

    $(document).ready(function () 

        var lastSel;
        var pageSize = 10; // the initial pageSize

        $("#grid").jqGrid(
            url: '/Ajax/GetJqGridActivities',
            editurl: '/Ajax/UpdateJqGridActivities',
            datatype: "json",
            colNames: [
                'Id',
                'Description',
                'Progress',
                'Actual Start',
                'Actual End',
                'Status',
                'Scheduled Start',
                'Scheduled End'
            ],
            colModel: [
                 name: 'Id', index: 'Id', searchoptions:  sopt: ['eq', 'ne'] ,
                 name: 'Description', index: 'Description', searchoptions:  sopt: ['eq', 'ne'] ,
                 name: 'Progress', index: 'Progress', editable: true, searchoptions:  sopt: ['eq', 'ne', "gt", "ge", "lt", "le"] ,
                 name: 'ActualStart', index: 'ActualStart', editable: true, searchoptions:  sopt: ['eq', 'ne', "gt", "ge", "lt", "le"] ,
                 name: 'ActualEnd', index: 'ActualEnd', editable: true, searchoptions:  sopt: ['eq', 'ne', "gt", "ge", "lt", "le"] ,
                 name: 'Status', index: 'Status.Name', editable: true, searchoptions:  sopt: ['eq', 'ne'] ,
                 name: 'ScheduledStart', index: 'ScheduledStart', searchoptions:  sopt: ['eq', 'ne', "gt", "ge", "lt", "le"] ,
                 name: 'ScheduledEnd', index: 'ScheduledEnd', searchoptions:  sopt: ['eq', 'ne', "gt", "ge", "lt", "le"] 
            ],
            jsonReader: 
                root: 'rows',
                id: 'Id',
                repeatitems: false
            ,
            rowNum: pageSize, // this is the pageSize 
            rowList: [pageSize, 50, 100],
            pager: '#pager',
            sortname: 'Id',
            autowidth: true,
            shrinkToFit: false,
            viewrecords: true,
            sortorder: "desc",
            caption: "JSON Example",
            onSelectRow: function (id) 
                if (id && id !== lastSel) 
                    $('#grid').jqGrid('restoreRow', lastSel);
                    $('#grid').jqGrid('editRow', id, true);
                    lastSel = id;
                
            
        );

        // change the options (called via searchoptions)
        var updateGroupOpText = function ($form) 
            $('select.opsel option[value="AND"]', $form[0]).text('and');
            $('select.opsel option[value="OR"]', $form[0]).text('or');
            $('select.opsel', $form[0]).trigger('change');
        ;

        // $(window).bind('resize', function() 
        //    ("#grid").setGridWidth($(window).width());
        //).trigger('resize');

        // paging bar settings (inc. buttons)
        // and advanced search
        $("#grid").jqGrid('navGrid', '#pager', 
             edit: true, add: false, del: false , // buttons
            , // edit option - these are ordered params!
            , // add options
            , // del options            
            closeOnEscape: true, multipleSearch: true, closeAfterSearch: true, onInitializeSearch: updateGroupOpText, afterRedraw: updateGroupOpText, // search options
            
        );


    // TODO: work out how to use global $.ajaxSetup instead
        $('#grid').ajaxError(function (e, jqxhr, settings, exception) 
            var str = "Ajax Error!\n\n";
            if (jqxhr.status === 0) 
                str += 'Not connect.\n Verify Network.';
             else if (jqxhr.status == 404) 
                str += 'Requested page not found. [404]';
             else if (jqxhr.status == 500) 
                str += 'Internal Server Error [500].';
             else if (exception === 'parsererror') 
                str += 'Requested JSON parse failed.';
             else if (exception === 'timeout') 
                str += 'Time out error.';
             else if (exception === 'abort') 
                str += 'Ajax request aborted.';
             else 
                str += 'Uncaught Error.\n' + jqxhr.responseText;
            
            alert(str);
        );


        $("#grid").jqGrid('bindKeys');
        $("#grid").jqGrid('inlineNav', "#grid");

    );

</script>


<table id="grid"/> <div id="pager"/>

【问题讨论】:

【参考方案1】:

没关系,找到了——只需要使用 multipleGroup: true

【讨论】:

您还可以考虑改善复杂搜索对话框的外观。请参阅提供相应代码示例的the answer。 Another answer 展示了如何改进“-”按钮的行为。 谢谢,我也去看看。

以上是关于jqGrid multiplesearch - 如何为每一行添加和/或列?的主要内容,如果未能解决你的问题,请参考以下文章

jqGrid 字符串自定义格式,如日期格式

jqGrid字符串自定义格式,如日期格式

jqGrid行编辑配置,方法,事件

jqGrid行编辑配置

jqGrid格式化数字输出

如何更改 jqGrid 中的字体大小?