JqG​​rid选择可能可见或不可见的特定行

时间:2012-09-13 14:19:47

标签: jquery jqgrid jqgrid-asp.net jqgrid-php

我有一个jqGrid,有几页项目。我有一行的Id可能在第一页,或者可能被埋在其他页面的某处。

给定行的ID,如何以编程方式选择这样的行?我正在使用按钮的click事件,如下所示

.on("click", function(){
     var myId = $(this).attr("id");
     $("#studentGrid").jqGrid.setSelection(myId, true);
});

当我点击按钮时,我得到以下firebug控制台。

TypeError:this.each不是函数

有什么想法吗?

修改
所以我选择只用一条记录来重新填充网格。问题是我没有使用本地数据。我的dataType是“json”。喜欢这个

  $("#studentGrid").jqGrid({
                url: '<c:url value="/students/studentjsondata"/>',
                datatype: 'json',
                height: 'auto',
                colNames:['id','First Name', 'Last Name', 'Other Name' ,'Date Of Birth', 'Gender'], 
                colModel:[ 
                        //Bla Bla Bla
                ],
                rowNum:10,
                autowidth: true,
                pager: '#pager', 
                sortname: 'id', 
                viewrecords: true, 
                sortorder: "desc",
                caption:"Students",
                emptyrecords: "Empty Records",
                subGrid: true,
                /* <![CDATA[ */ 
                onSelectRow: function(id){ 
                    if((lastsel != 0)&&(id!==lastsel)){ 
                        $("#studentGrid").jqGrid('collapseSubGridRow', lastsel);                
                    } 
                    lastsel=id; 
                }/* ]]> */ ,
                subGridOptions: { 
                    "plusicon" : "ui-icon-triangle-1-e", 
                    "minusicon" : "ui-icon-triangle-1-s", 
                    "openicon" : "ui-icon-arrowreturn-1-e", 
                    "reloadOnExpand" : true, 
                    "selectOnExpand" : true  
                },
                subGridRowExpanded: function(subgrid_id, row_id) {
                    //Bla Bla Bla
                }
    });

我有json字符串我想重新填充网格。如何使用此新数据重新初始化网格。我在下面的json字符串中有相应的逻辑如下,但没有任何反应。

{'page':'1', 'records':'1', 'total':'1', 'rows':[{'id':'7385', 'cell': ['Max', 'Payne', '', 'September 16, 2012', 'Male']}]}


.on("click", function(){
  var myNewData = eval('(' + $(this).attr("griddata") + ')');
  $("#studentGrid").jqGrid('setGridParam', { datatype: 'local', data: myNewData}).trigger('reloadGrid');
 });    

4 个答案:

答案 0 :(得分:3)

您可以尝试在setSelection网格的loadComplete内添加调用$("#studentGrid")方法:

loadComplete: function () {
    $(this).jqGrid("setSelection", myId, true);
}

如果当前页面上没有id等于myId的行,则不会选择任何行。如果id = myId的行在当前页面上执行,则将选择该行。这是你想要的吗?

答案 1 :(得分:0)

您只能选择当前页面上的行。

您可以将所选行存储在数组(或其他一些数据结构)中,并在更改页面时选择任何“选定”行 - 此答案应该有所帮助:jqGrid: How to use multiselect on different pages

或者你可以按照你的要求做你建议的,只显示一行。

答案 2 :(得分:0)

我只是猜测 -

  1. 如果您已经拥有需要选择内容的ID,为什么不将其保留在内存中?或者也许是cookies或HTML5 locaStorage?

  2. 然后使用这些值设置所选行,当有关行出现在当前页面时。

  3. 您始终可以在页面请求之间来回序列化“选定的ID”(如果不使用ajax)

答案 3 :(得分:-1)

所以伙计们,谢谢大家的评论。他们引导我回答这个问题。这link也非常有用。所以这是使用json字符串更新非本地数据的代码。

.on("click", function(){
    $("#studentGrid").jqGrid('setGridParam', { jsonReader: { repeatitems: false }, datatype: 'jsonstring', datastr: $(this).attr("griddata")}).trigger('reloadGrid');
});

希望它可以帮助某人。现在我所要做的就是弄清楚如何通过删除这些参数来正确地重新加载网格。这是通过使用默认的jsonReader完成的,如下所示。

$("#studentGrid").jqGrid('setGridParam', {    jsonReader : {
root: "rows",
page: "page",
total: "total",
records: "records",
repeatitems: true,
cell: "cell",
id: "id",
userdata: "userdata",
subgrid: {root:"rows", 
repeatitems: true, 
cell:"cell"
 }
} , datatype: 'json', datastr: null});