【问题标题】:is there a way to programatically set a filter in jquery jqgrid?有没有办法在 jquery jqgrid 中以编程方式设置过滤器?
【发布时间】:2011-03-19 17:20:46
【问题描述】:

我有一个页面,上面有一个 jqgrid,顶部有过滤器行。我想在加载此网格页面但在其中一列上设置过滤器的另一个页面上有一个链接。是否可以通过链接或人们可以建议的任何其他解决方法来做到这一点?

【问题讨论】:

  • 请看我更新的答案。它现在可以在您的代码中使用吗?
  • 您能解释一下您指的是哪种“顶部过滤器行”吗?你的意思是过滤器工具栏(见trirand.com/jqgridwiki/doku.php?id=wiki:toolbar_searching)吗?
  • @Oleg - 是的..我想以编程方式模拟在过滤器工具栏中输入值并按回车键

标签: jquery asp.net-mvc jqgrid


【解决方案1】:

我解决这个问题的方法是传入以下代码:

var myfilter = { groupOp: "AND", rules: [] };
myfilter.rules.push({ field: "DataIssuesYN", op: "eq", data: "Y" });

然后在 jqGrid 设置中,我传入 postData:

  postData: (myfilter) ? { filters: JSON.stringify(myfilter)} : {},

【讨论】:

    【解决方案2】:

    可以修改jqGrid调用的url,在querystring中加入filter选项,然后在服务端处理。

    $(link).click(function(){
    
    $(".mygrid").jqGrid('setGridParam',{url:"server.php?useMyFilter=1"})
    });
    

    【讨论】:

    • 这几乎是对的。完成此操作后,您需要$("#grid").trigger("reloadGrid");
    【解决方案3】:

    您可以尝试在colModel 中使用searchoptionsdataInit 属性。该函数有一个参数elem$(elem) 将代表 input html 元素,您可以使用所需的任何数据对其进行初始化。

    更新:尝试在 colModel 中包含您要设置过滤器的列的描述中的以下选项:

    searchoptions:{
        dataInit:function(elem){
            $(elem).val("Test");
            setTimeout(function(){
                $(elem).focus().trigger({ type: 'keypress', charCode: 13 });
            },500);
       }
    }
    

    在此示例中,我将“测试”文本设置为过滤器并模拟按 Enter 键。我想searchOnEnter 设置为默认值true。过滤字符串(如“Test”)的转发很大程度上取决于你程序的结构,但我希望它可以很容易实现。

    更新 2:可能有不同的理解应该如何理解“一个带有 jqgrid 的页面,顶部有过滤器行”。我把它看成是过滤器工具栏中的过滤器设置,因为过滤器工具栏将作为一行添加到网格行的顶部。我的解决方案可以在这里看到Setting filter in the filter toolbar

    【讨论】:

    • 这里的区别在于所需的功能是否只在首次加载时起作用,或者它是否应该在可重复的情况下起作用,例如按照她描述的带有参数的链接。
    • @Brent:看看the comment,它描述了最初在提出问题时想要leora的内容。我后来发布了许多其他使用postData的答案。您也应该在问题(和答案)的日期提出问题时考虑用户的要求。
    【解决方案4】:

    解决方案 1.

    在 javascript 中以语法方式: 使用 hideCol 并给它列名 或一组列 [colnames,otherone] jqGrid 对象给定一个 colname,将隐藏具有该名称的列。给定一个 colnames [“name1”,”name2”] 的数组,在示例中,它将隐藏具有这些名称的列,即“name1”和“name2”。 colname 或 colnames 中的名称必须都是 colModel 中的有效名称。 请记住,这不会更改列的宽度,因此您仍然需要更改 colModel 示例:

    colModel :[{name:'photo', index:'photo', width:605, sortable:false} , ... ]

    <script>
     jQuery("#grid_id").setGridParam({...}).hideCol("photo").trigger("reloadGrid");
    </script>
    

    解决方案 2: 解决方案1:

    jQuery(document).ready(function(){ 
      jQuery("#list").jqGrid({
        url:'json.php?myfilter=columnname',
        datatype: 'json',//or xml?
        mtype: 'GET', //<!--important
        colNames:['Banner','name', 'city','state','Zip Code','Country'],
        colModel :[ 
          {name:'photo', index:'photo', width:605, sortable:false} ,
    

    然后在 json.php 中,您可以在打印之前从数组中取出列键

    【讨论】:

    • 哦,第一个解决方案太棒了我不知道我是在服务器端像你的第二个解决方案那样做,但我刚刚尝试过,它有效!
    • 我不确定是否有人要求使用这种过滤器。过滤器工具栏中有过滤器(请参阅trirand.com/jqgridwiki/doku.php?id=wiki:toolbar_searching)。如果确实想设置某种存在于 jqGrid 之外的过滤器,那么在我看来,对于postData(参见stackoverflow.com/questions/2928371/…)来说这样做更好。这不仅适用于 HTTP GET,也适用于 HTTP POST。此外,如果您手动构建过滤器 url,它应该是 'myfilter='+encodeURIComponent(columnname)
    猜你喜欢
    • 1970-01-01
    • 2011-07-13
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 2019-08-03
    • 1970-01-01
    • 2014-07-24
    相关资源
    最近更新 更多