【问题标题】:jqgrid search/filterjqgrid 搜索/过滤器
【发布时间】:2011-08-14 10:07:56
【问题描述】:

这与我在link 中的最新问题有关。我已经弄清楚为什么它显示“服务器错误:未指定参数'dataType'”的错误是什么。这是filter="[{'name':'main_account_group_code','comparison':'starts_with','value':$('#searchCode').val()}]";

filter=[{'name':'main_account_group_code','comparison':'starts_with','value':$('#searchCode').val()}];

现在,我的网格已成功显示搜索中的数据。我的问题是,是否有另一种方法可以在不使用全局变量的情况下做到这一点?我的前辈告诉我,这是一种不好的做法,请尝试其他方法。我也有这种感觉,在 jqgrid 中显示我的搜索数据(而不是使用全局)仍然有一种最好的方法,但我只是不知道该怎么做。

我已经自己解决这个问题好几天了,但我仍然没有最好的方法来解决这个问题(仍然卡住)。任何人都可以帮助..

编辑: 这是我的 jqgrid 代码。

$("#list1").jqGrid({
    url: '',    
    datatype: 'local',      
    jsonReader : {              
        root: function(obj) {
            var root = [];

            if  ('error' in obj) 
            {
                showMessage(obj.error['class'] + ' error: ' + obj['error']['msg']);
            }
            else
            {
                $.each(obj['result']['main']['rowdata'], function(rowIndex, rowDataValue) {
                    var row = {};
                    $.each(rowDataValue, function(columnIndex, rowArrayValue) {
                      var fldName = obj['result']['main']['metadata']['fields'][columnIndex].name;    
                       row[fldName] = rowArrayValue;                  
                    });
                    root[rowIndex] = row;

                });
            };

            return root;
        },          
        page: "result.main.page",   
        total: "result.main.pageCount",     
        records: "result.main.rows",            
        repeatitems: false,                             
        id: "0"                                                     
    },
    colNames:['Code', 'Description','Type'],        
    colModel:[
        {name:'code'},
        {name:'desc'},
        {name:'type'}
    ],
    postData: {
      filters:[{"name":"main_account_group_code", "comparison":"starts_with", "value":$('#searchCode').val()}]
    },
    rowNum:10,                      
    viewrecords: true,
    rowList:[10,50,100],    
    pager: '#tblDataPager1',
    sortname: 'desc',   
    sortorder: 'desc',      
    loadonce:false, 
    height: 250,
caption: "Main Account"
});  

【问题讨论】:

    标签: javascript search jqgrid filter


    【解决方案1】:

    您在上一个问题中使用的方式我不喜欢不是因为“全局”变量filter 的使用,而是因为复杂的逻辑。特别奇怪的是,我发现您在 serializeGridData 事件句柄的实现中丢弃了许多 jqGrid 参数。我确信代码可以大大简化,但您没有发布您使用的更完整的 JavaScript 代码。甚至您使用哪种 HTTP 方法与服务器通信(您是否使用mtype:"POST" 参数)。

    现在关于您的主要问题。变量 filter 应该是全局的。如果应该是可见的。例如:

    $(document).ready(function () {
        var filter = ''; //this is NOT global variable
        $('#btnsearchCode').click(function(){
            filter="...any value..."; // you can change the value of filter here
            //...
            $('#list1').trigger('reloadGrid');
        });
    
        $('#list1').jqGrid({
            // define jqGrid where you can use filter if needed
            // either directly of inside of body of any function
        });
    });
    

    【讨论】:

    • Oleg,我已经在上一个问题中编辑了我的帖子。如果我没有在我的 serializedGridData 中放置过滤器,我的搜索数据将不会显示在网格中。相反,它会显示所有数据。我使用了'类型:'GET''。请再看看我的最后一个问题。谢谢你的时间。
    • 还有奥列格,我不知道你说我在你的serializeGridData事件句柄实现中丢弃了jqGrid的许多参数是什么意思?我在上一个问题中发布的那些参数是我在程序中开始使用 jqgrid 以来使用的参数。
    • @jayAnn:在您的serializeGridData 实现中,您仅使用rowspagesidx。您忽略(丢弃)的函数的postData 参数的所有其他属性。例如,您忽略 filters 参数。所以有了serializeGridData这样的实现,你不能扩展jqGrid的postData参数。看看我最近的另一个答案http://*.com/questions/5810885/postdata-not-passing-any-parameters/5811359#5811359,它可以为您提供一些更好的实施建议。
    • Oleg,如果我不能扩展jqGrid的postData参数,我该怎么办?我知道我的“serializeGridData”中应该有过滤器,但我只是不知道如何从我的函数中传递过滤器......感谢您的回复。
    • 顺便说一句,奥列格,我已经把 $('#list1') 的 jqgrid 定义放在了。请参阅我的编辑。谢谢