Jqgrid搜索工具栏筛选唯一的删除列表

时间:2011-06-16 18:22:50

标签: jquery jqgrid

我使用了this post中的示例,并且可以根据列数据在搜索工具栏中创建唯一的下拉列表。但是,如果我有多页数据,则只会从第一页填充下拉列表。我是jquery和jqgrid的新手,并且无法找到解决方案。有什么想法吗?

感谢。

以下是从上面链接的帖子中复制的代码。

var mydata = [
    {id:"1", Name:"Miroslav Klose",     Category:"sport",   Subcategory:"football"},
    {id:"2", Name:"Michael Schumacher", Category:"sport",   Subcategory:"formula 1"},
    {id:"3", Name:"Albert Einstein",    Category:"science", Subcategory:"physics"},
    {id:"4", Name:"Blaise Pascal",      Category:"science", Subcategory:"mathematics"}
],
grid = $("#list"),
getUniqueNames = function(columnName) {
    var texts = grid.jqGrid('getCol',columnName), uniqueTexts = [],
        textsLength = texts.length, text, textsMap = {}, i;
    for (i=0;i<textsLength;i++) {
        text = texts[i];
        if (text !== undefined && textsMap[text] === undefined) {
            // to test whether the texts is unique we place it in the map.
            textsMap[text] = true;
            uniqueTexts.push(text);
        }
    }
    return uniqueTexts;
},
buildSearchSelect = function(uniqueNames) {
    var values=":All";
    $.each (uniqueNames, function() {
        values += ";" + this + ":" + this;
    });
    return values;
},
setSearchSelect = function(columnName) {
    grid.jqGrid('setColProp', columnName,
                {
                    stype: 'select',
                    searchoptions: {
                        value:buildSearchSelect(getUniqueNames(columnName)),
                        sopt:['eq']
                    }
                }
    );
};
grid.jqGrid({
    data: mydata,
    datatype: 'local',
    colModel: [
        { name:'Name', index:'Name', width:200 },
        { name:'Category', index:'Category', width:200 },
        { name:'Subcategory', index:'Subcategory', width:200 }
    ],
    sortname: 'Name',
    viewrecords: true,
    rownumbers: true,
    sortorder: "desc",
    ignoreCase: true,
    pager: '#pager',
    height: "auto",
    caption: "How to use filterToolbar better locally"
}).jqGrid('navGrid','#pager',
          {edit:false, add:false, del:false, search:false, refresh:false});

setSearchSelect('Category');
setSearchSelect('Subcategory');

grid.jqGrid('setColProp', 'Name',
            {
                searchoptions: {
                    sopt:['cn'],
                    dataInit: function(elem) {
                        $(elem).autocomplete({
                            source:getUniqueNames('Name'),
                            delay:0,
                            minLength:0
                        });
                    }
                }
            });

grid.jqGrid('filterToolbar',
            {stringResult:true, searchOnEnter:true, defaultSearch:"cn"});

2 个答案:

答案 0 :(得分:0)

您必须将列表发送到jqgrid之外的页面。 jqgrid一次只会拉页面,如果你在ajax模式下使用它,则不知道你的所有其他数据。

如果这只是使用上面的mydata并且数据全部在js的范围内,而只是在另一个页面上(jqgrid上的结果集),为什么不构建列表并使用它到位var称为文本。您只会查看页面数据,而不是您加载的所有数据。这有意义吗?

答案 1 :(得分:0)

如果您使用datatype: 'local',则可以在mydata中获得所需的信息。或者,您可以使用var gridData = grid[0].p.data或相同var gridData = grid.jqGrid('getGridParam','data')来使网格包含所有网格页。因此,您可以使用textsLengthtexts[i]getUniqueNames代替gridData.lengthgridData[columnName] String(gridData[columnName])