要想使用grid里的扩展搜索功能,除了要引用ligerui主要的js文件外,还必须引入下面的JS文件:sql
一、Source\demos\filter\ligerGrid.showFilter.jsjson
二、Source\lib\json2.jsc#
(以1.19的文件包目录结构为基础)服务器
以上两个文件中的第一个文件有bug会形成AJAX加载数据失败。ide
bug以下:ui
原文件有问题的代码段以下:spa
function loadData() { var data = filter.getData(); if (g.dataAction == "server") //服务器过滤数据 loadServerData(data); } else { //本地过滤数据 loadClientData(data); } }
以上代码的if判断出现了问题,g.dataAction永远都不可能等于server由于g下根本没有dataAction属性。g变量存的是gird,而p才是存放grid的选项的options。可能做者一时疏忽打错了。纠正这个问题只须要将g改为p即解决。以下:.net
function loadData() { var data = filter.getData(); //if (g.dataAction == "server") if (p.dataAction == "server") { //服务器过滤数据 loadServerData(data); } else { //本地过滤数据 loadClientData(data); } }
这样就可使用搜索条件经过AJAX加载数据了。翻译
除了上面的问题之外,还有下面一个问题同时形成加载数据不成功。以下code
若是想要经过搜索功能生成条件语句传递给后台经过AJAX的方式加载数据到表格的话,还要具有搜索控件生成语句的翻译后台程序,我本身使用的是c#.net。这个翻译程序的类库我也不记得是从那里下载来的了,所包含的文件以下:
FilterGroup.cs
FilterHelper.cs
FilterParam.cs
FilterRule.cs
FilterTranslator.cs
以上这些代码的做用是用来将gird表格中搜索控件所生成的语句翻译成sql语句。(以上文件中的代码也有bug,会产生异常)
bug出如今FilterTranslator.cs文件中的TranslateRule方法,部分代码以下:
public string TranslateRule(FilterRule rule) { StringBuilder bulider = new StringBuilder(); if (rule == null) return " 1=1 "; if (currentParmMatch.ContainsKey(rule.field)) { var field = currentParmMatch[rule.field](); bulider.Append(paramPrefixToken + CreateFilterParam(field, "int")); }
在这段代码中currentParmMatch有可能没有指定,那么这样就会形成这句判断语句出现异常而程序停止,从而获取不到任务数据。解决办法就是将这句修改为这样就能够了。
public string TranslateRule(FilterRule rule) { StringBuilder bulider = new StringBuilder(); if (rule == null) return " 1=1 "; if(currentParmMatch!=null) { var field = currentParmMatch[rule.field](); bulider.Append(paramPrefixToken + CreateFilterParam(field, "int")); }
一样的问题在这个方法中出现了两次,还有一个在以前这几行代码的下面几行里:
else if (op != "isnull" && op != "isnotnull") { //若是值使用了 用户信息参数 好比 [EmptID] = {CurrentEmptID} //if (rule.value != null && currentParmMatch.ContainsKey(rule.value.ObjToStr())) if (rule.value != null && currentParmMatch.ContainsKey(rule.value.ToString())) { //var value = currentParmMatch[rule.value.ObjToStr()](); var value = currentParmMatch[rule.value.ToString()](); bulider.Append(paramPrefixToken + CreateFilterParam(value, "int")); }
修改成:
else if (op != "isnull" && op != "isnotnull") { //若是值使用了 用户信息参数 好比 [EmptID] = {CurrentEmptID} //if (rule.value != null && currentParmMatch.ContainsKey(rule.value.ObjToStr())) if(rule.value!=null && currentParmMatch!=null) { //var value = currentParmMatch[rule.value.ObjToStr()](); var value = currentParmMatch[rule.value.ToString()](); bulider.Append(paramPrefixToken + CreateFilterParam(value, "int")); }
这样就解决全部问题了。