關於ligerui 中 grid 表格的擴展搜索功能在遠程數據加載時沒法使用的解決辦法

要想使用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"));
                }

這樣就解決全部問題了。

相關文章
相關標籤/搜索