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

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

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

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

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

TypeError:this.each不是函数

有任何想法吗 ?

编辑
所以我选择只用一条记录来重新填充网格。 问题是我没有使用本地数据。 我的dataType是“json”。 像这样

  $("#studentGrid").jqGrid({ url: '', 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, /*  */ , 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'); }); 

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

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

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

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

您可以将所选行存储在数组(或其他一些数据结构)中,并在更改页面时选择任何“选定”行 – 此答案应该有所帮助: jqGrid:如何在不同页面上使用multiselect

或者,您可以按照您的要求执行建议并仅显示一行。

我只是猜测 –

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

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

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

所以伙计们,谢谢大家的评论。 他们引导我回答这个问题。 这个链接也非常有用。 所以这是使用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});