1

我有一个这样的 colModel 条目:

{name:'status', index:'status', sorttype:"text", xmlmap:"STATUS", width:"90", stype: 'select', searchoptions:{sopt: ['eq','ne'], value:':all;Hold:Hold;4-Eye-Check:4-Eye-Check;Approved:Approved;Rejected:Rejected;Closed:Closed'}},

只要在FilterToolBar中使用它就可以正常工作,但是如果我打开NavGridSearch,我会遇到麻烦。条目“全部”不再起作用。FilterToolBar 中的查询似乎忽略了我的空,但 NavGridSearch 没有。

是否有任何通配符可以用来代替空字符串,无论我在 FilterToolBar 或 NavGridSearch 中搜索所有状态条目,它都会提供所有条目?

我使用最新的 OpenSource jQGrid Lib(4.3.2)

提前致谢!

4

1 回答 1

0

我试图了解“全部”标准的用例。'all' 的目的似乎是您希望网格忽略此搜索条件并返回所有行而不考虑此值?如果是这样的话,用户为什么还要选择这个搜索条件呢——他们可以去掉它,达到同样的效果。还是我错过了什么?


更新

网格使用函数createEl : function(eltype,options,vl,autowidth, ajaxso)为搜索表单创建选择。不幸的是,这个选择总是将all条件添加到列表中,即使它的搜索值""不会匹配任何行。一种解决方法是修改网格以跳过具有空值的选择选项。使用源文件jquery.jqGrid.src.js,您可以添加以下代码以跳过该all选项:

else if (sv.length > 1 && sv[0].length === 0) continue;

这是在以下范围内createEl

                if(typeof options.value === 'string') {
                    so = options.value.split(delim);
                    for(i=0; i<so.length;i++){
                        sv = so[i].split(sep);
                        if(sv.length > 2 ) {
                            sv[1] = $.map(sv,function(n,ii){if(ii>0) { return n;} }).join(sep);
                        } else if (sv.length > 1 && sv[0].length === 0) continue; // <-- Change this line
                        ov = document.createElement("option");
                        ov.setAttribute("role","option");
                        ov.value = sv[0]; ov.innerHTML = sv[1];
                        elem.appendChild(ov);
                        if (!msl &&  ($.trim(sv[0]) == $.trim(vl) || $.trim(sv[1]) == $.trim(vl))) { ov.selected ="selected"; }
                        if (msl && ($.inArray($.trim(sv[1]), ovm)>-1 || $.inArray($.trim(sv[0]), ovm)>-1)) {ov.selected ="selected";}
                    }

如果您需要缩小版本,请更新 jqGrid 的“src”版本,然后通过 Google Closure Compiler 运行它。

我不确定这是一个通用的更改,这就是为什么我现在称它为一种解决方法。从长远来看,需要找到更好的解决方案,以便对 jqGrid 进行修补...稍后我将尝试找到更多时间来重新讨论这个问题。

这有帮助吗?

于 2012-05-23T14:04:11.663 回答