以搜索形式覆盖数据下拉值(multipleSearch)

时间:2012-05-22 12:25:37

标签: jqgrid

我有一个像这样的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 Im会遇到麻烦。条目“all”不再起作用。 FilterToolBar中的查询似乎忽略了我的空,但NavGridSearch没有。

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

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

提前致谢!

1 个答案:

答案 0 :(得分:0)

我试图理解“所有”标准的用例。似乎“全部”的目的是您希望网格忽略此搜索条件并返回所有行而不管此值如何?如果是这种情况,为什么用户甚至想要选择这个搜索条件 - 他们可以删除它,并且将实现相同的效果。或者我错过了什么?

<小时/> 更新

网格使用函数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可以修补...我会试着找一些时间来重新审视这个问题。

这有帮助吗?