Java 在jqGrid中选择另一行时,默认选定行的颜色不变
我有一个jgGrid,在其中我将在页面加载时默认选择第一行(所选行高亮显示为黄色)。现在,当我在同一jqGrid中选择其他行时,当前选中的行和默认选中的行都用黄色高亮显示。理想情况下,当用户选择另一行时,先前选择的行不应高亮显示为黄色 下面是更好地解释的快照: 默认选中的行高亮显示为黄色(在页面加载中): 当前选定行和默认选定行均高亮显示为黄色: 以下是我的jqGrid代码:Java 在jqGrid中选择另一行时,默认选定行的颜色不变,java,javascript,jqgrid,Java,Javascript,Jqgrid,我有一个jgGrid,在其中我将在页面加载时默认选择第一行(所选行高亮显示为黄色)。现在,当我在同一jqGrid中选择其他行时,当前选中的行和默认选中的行都用黄色高亮显示。理想情况下,当用户选择另一行时,先前选择的行不应高亮显示为黄色 下面是更好地解释的快照: 默认选中的行高亮显示为黄色(在页面加载中): 当前选定行和默认选定行均高亮显示为黄色: 以下是我的jqGrid代码: $("#discActionHistGrid").jqGrid({ url:contextRoot+'dis
$("#discActionHistGrid").jqGrid({
url:contextRoot+'discActHist',
datatype: 'json',
jsonReader: {repeatitems: false},
mtype: 'POST',
colNames: ['Record ID','Close date','Final Action','Summary','Title','Council','Retraction'],
colModel: [
{ name: 'referralId', index: 'referralId', width: 25 },
{ name: 'closureDate', index: 'closureDate', width: 30, formatter: function(cellValue){return $.datepicker.formatDate('mm-dd-yy', new Date(cellValue));}},
{ name: 'finalAction', index: 'finalAction', width: 30 },
{ name: 'summary', index: 'summary', width: 50, cellattr: function (rowId, tv, rawObject, cm, rdata) { return 'style="white-space: normal;line-height: 1.3em;"'; } },
{ name: 'title', index: 'title', width: 30 },
{ name: 'councilNm', index: 'councilNm', width: 30 },
{ name: 'retract', index: 'retract', width: 30, formatter: function (cellvalue, options, rowObject) {return '<a href="'+ contextRoot +'dart/approved">Retract</a>';} }
],loadError: function(xhr,st,err) {
alert(err);
},gridComplete: function() {
$(this).setSelection(1, true);
},onSelectRow : function(rowid, status, e) {
var selRow = $(this).getGridParam("selrow");
var selReferralId = $(this).getCell(selRow, 'referralId');
$("#referralDetailsTab").load(contextRoot+"refDetailsTab?refId=" + selReferralId );
},
pager: '#discActionHistPager',
sortorder: 'desc',
sortname: 'closureDate',
gridview: true,
viewrecords: true,
loadonce: true,
hoverrows : true,
autowidth: true,
height: 'auto',
rowNum: 3,
shrinkToFit: true,
altRows:true
});
$("#discActionHistGrid").jqGrid('navGrid','#discActionHistPager',
{
edit:false,
add:false,
del:false,
search:false,
refresh:false
});
我认为对什么是rowid存在很大的误解,jqGrid总是需要为每一行提供唯一的
id
jqGrid设计用于在网格中显示来自后端(来自数据库)的项。你的情况正是如此。特别是对于这种情况,jqGrid的大多数回调都使用rowid作为参数。如果正确填充网格,则rowid的值应与保存数据的数据库表中的id
的值相同
只有当jqGrid有错误的输入数据且不包含id信息时,jqGrid才必须使用一些本地生成的唯一id。由于与旧版本jqGrid的兼容性问题,它仍然使用数字1、2、3作为rowid
什么是rowid?网格是基于HTML
构建的。表格正文中的行是HTML中的
。jqGrid的实现必须为
元素(行的id)的id
属性分配一些唯一的值。可以将文档中的id
值命名为rowids
在您的情况下,您应该在您使用的jsonReader
中包含id:“referralId”
,或者(最好两者都包含)在referralId
列的定义中包含key:true
属性:
{ name: 'referralId', key: true, width: 25, sorttype: 'integer' }
更改后,您可以简化onsetrow
回调到的代码
onSelectRow: function (rowid) {
$("#referralDetailsTab").load(contextRoot + "refDetailsTab?refId=" + rowid);
}
或
使代码更干净,并且独立于具有rowid的值
jqGrid中没有“默认选定行”。如果要在加载网格后选择网格上的第一行,可以将gridComplete
的代码替换为以下代码
loadComplete: function () {
if (this.rows.length > 1) {
// select the first row of the grid
$(this).jqGrid("setSelection", this.rows[1].id, true);
}
}
(请参见我在哪里描述我为什么建议使用loadComplete
而不是gridComplete
)
我希望在更改后,您描述的问题将消失。感谢Oleg提出的清理我的代码的建议。你真是个天才!但我在查询中提到的最初问题仍然存在(即使在我选择(并高亮显示)网格中的另一行后,网格加载上选择的第一行仍保持高亮显示。还想提及:仅当我显式单击所选(并高亮显示)行时)第一行,然后单击其他行,一切正常,即只有当前选定的行高亮显示为黄色。@tarares:我无法在测试中重现该问题。原因可能与URL
ontextRoot+'disacthist'
返回的特定数据有关。您能测试一些重现p的JSON数据吗问题?
onSelectRow: function (rowid) {
$("#referralDetailsTab").load(contextRoot + "refDetailsTab?refId=" + rowid);
}
onSelectRow: function (rowid) {
$("#referralDetailsTab").load(contextRoot + "refDetailsTab?refId=" +
encodeURIComponent(rowid));
}
loadComplete: function () {
if (this.rows.length > 1) {
// select the first row of the grid
$(this).jqGrid("setSelection", this.rows[1].id, true);
}
}