要想使用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")); }
這樣就解決全部問題了。