【问题标题】:is there an api in jqgrid to add advanced filters to post data?jqgrid 中是否有用于添加高级过滤器以发布数据的 api?
【发布时间】:2011-07-13 11:19:03
【问题描述】:

我看到在这段代码中,你可以通过在你的 javascript 中设置 postdata 过滤器。

postData: {
   filters:'{"groupOp":"AND","rules":['+
    '{"field":"invdate","op":"gt","data":"2007-09-06"},'+
    '{"field":"invdate","op":"lt","data":"2007-10-04"},'+
    '{"field":"name","op":"bw","data":"test"}]}'
}

是否有任何 API 可以让您构建它。比如:

jqgrid("#grid").addPostDataFilters("AND");
jqgrid("#grid").addFilteritem("field", "cn", "value");
jqgrid("#grid").addFilteritem("field1", "eq", "value2");

帮助生成到顶部的 postdata 过滤器代码??

我试过了,但它似乎不起作用:

.jqGrid("setGridParam", { editurl: "/Project/UpdateMe",
         ondblClickRow: function (rowid) {
             editProject(rowid); // window.location.href="/Project/Detail/"+rowid;
         }
});

var grid = $("#grid");
var f = { groupOp: "AND", rules: [] };
f.rules.push({ field: "Name", op: "cn", data: "volat" });
grid.p.search = f.rules.length > 0;
$.extend(grid.p.postData, { filters: JSON.stringify(f) });

更新:

我现在有这个工作(感谢 Oleg)但如果由于某种原因“查找”按钮出现空白(即使我确实设置了高级过滤器)我添加了一张图片

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    过滤器

    filters:'{"groupOp":"AND","rules":[{"field":"invdate","op":"gt","data":"2007-09-06"},{"field":"invdate","op":"lt","data":"2007-10-04"},{"field":"name","op":"bw","data":"test"}]}'
    

    您在问题中包含的内容被序列化为对象的 JSON 版本

    var myfilter = {
        groupOp: "AND",
        rules: [
            { field: "invdate", op: "gt", data: "2007-09-06" },
            { field: "invdate", op: "lt", data: "2007-10-04" },
            { field: "name",    op: "bw", data: "test"       }
        ]
    }
    

    可以很容易地动态构造:

    // addPostDataFilters("AND");
    var myfilter = { groupOp: "AND", rules: []};
    
    // addFilteritem("invdate", "gt", "2007-09-06");
    myfilter.rules.push({field:"invdate",op:"gt",data:"2007-09-06"});
    
    // addFilteritem("invdate", "lt", "2007-10-04");
    myfilter.rules.push({field:"invdate",op:"lt",data:"2007-10-04"});
    
    // addFilteritem("name", "bw", "test");
    myfilter.rules.push({field:"name",op:"bw",data:"test"});
    
    // generate to top postdata filter code
    var grid = $("#list");
    grid.jqGrid({
        // all prarameters which you need
        search:true, // if you want to force the searching
        postData: { filters: JSON.stringify(myfilter)}
    });
    

    如果网格已经存在,您想使用可以使用的设置重新加载网格

    grid[0].p.search = myfilter.rules.length>0;
    $.extend(grid[0].p.postData,{filters:JSON.stringify(myfilter)});
    grid.trigger("reloadGrid",[{page:1}]);
    

    相反。大多数网络浏览器都原生支持JSON.stringify 函数,但可以肯定的是 你应该在你的页面上包含json2.js

    【讨论】:

    • @Oleg - 我正在使用您的第一种方法,效果很好。一个问题是,当我单击查找按钮时,它似乎没有预先默认使用当前过滤器。当我从头开始使用过滤器 UI 时,它看起来就像是这样。你能想出为什么不能确定当前的高级过滤器的任何原因吗??
    • @ooo:你写的很奇怪。在the answer 中有the demo。如果您单击“搜索”按钮,您将看到当前过滤器将被使用。您可以将您的问题附加到具有您描述的问题的代码示例中。我会尽力帮助你的。
    • @Oleg - 同意。这就是为什么我很困惑。无论如何,我删除了我的缓存并重新加载了页面,现在它变得完美了。感谢您的帮助。
    • @ooo:两个过滤器(工具栏和高级)都使用postData.filters的兼容格式,但工具栏过滤器逻辑更复杂:对于stype:"select",它使用sopt数组中的第一个值,如果它是定义或eq。对于stype:"select" 或如果未定义stype,jq​​Grid 也使用sopt[0]defaultSearch,如果未定义,则为bw。工具栏搜索未读取postData - 它只是覆盖它。 searchOnEnterautosearch 参数也起着重要作用。所以工具栏搜索和高级搜索非常接近,但会相互干扰。
    • @icedek:过滤器innot in 在本地不起作用。只有在向服务器发出请求的情况下才有效。您的服务器代码可以根据需要处理innot in任何 语法。 jqGrid 只是将数据和操作代码(inni)以与用户键入数据完全相同的形式发送到服务器。
    猜你喜欢
    • 2019-02-18
    • 2012-08-10
    • 1970-01-01
    • 2011-06-12
    • 2010-12-27
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 2019-05-04
    相关资源
    最近更新 更多