• 关于ligerui 中 grid 表格的扩展搜索功能在远程数据加载时无法使用的解决办法


    要想使用grid里的扩展搜索功能,除了要引用ligerui主要的js文件外,还必须引入下面的JS文件:

    1、SourcedemosfilterligerGrid.showFilter.js

    2、Sourcelibjson2.js

    (以1.19的文件包目录结构为基础)

    以上两个文件中的第一个文件有bug会造成AJAX加载数据失败。

    bug如下:

    原文件有问题的代码段如下:

    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即解决。如下:

    function loadData() {
            var data = filter.getData();
            //if (g.dataAction == "server")
            if (p.dataAction == "server") {
                //服务器过滤数据
                loadServerData(data);
            }
            else {
                //本地过滤数据
                loadClientData(data);
            }
        }

    这样就可以使用搜索条件通过AJAX加载数据了。

    除了上面的问题以外,还有下面一个问题同时造成加载数据不成功。如下

    如果想要通过搜索功能生成条件语句传递给后台通过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"));
                    }

    这样就解决所有问题了。

  • 相关阅读:
    sql批量生成showdocs数据字典的md文档
    kis注册账套的时候选不到数据
    kis中导入其它账套的科目
    sql server查询某个字段的类型
    sql server修改默认值语句
    k3 cloud查询关联关系
    k3 cloud中根据表明查找业务对象
    计算机系统要素(存储器)
    计算机系统要素(多路复用器)
    领域设计:聚合与聚合根
  • 原文地址:https://www.cnblogs.com/xmily/p/3642071.html
Copyright © 2020-2023  润新知