我的网站包含listgrid和带有点的openlayers地图。当我点击其中一个时,应用程序将滚动并标记此记录。这适用于标准的listgrid,但是使用分组的listgrid它不起作用。
lg = new ListGrid();
lg.setWidth(330);
lg.setDataSource(ds1);
lg.setAutoFetchData(true);
lg.setSortField("KU_NAME");
lg.setGroupStartOpen(GroupStartOpen.ALL);
lg.setGroupByField("KU_NAME");
lg.setShowFilterEditor(true);
kuName = new ListGridField("KU_NAME", "Künstler Name",150);
// Standorte
ListGridField stdOrt = new ListGridField("STDORT_NR","Standort Nr.");
ListGridField oid = new ListGridField("OID","OID.");
lg.setFields(stdOrt,kuName,oid);
和选择:
String stdortOID = stdOrtOIDjso.toString();
ListGridRecord[] records = lg.getRecords();
int i;
for (i = 0; i < records.length; i++) {
if (records[i].getAttribute("OID").equalsIgnoreCase(stdortOID)){
break;
}
}
lg.deselectAllRecords();
lg.selectRecord(i);
lg.scrollToRow(lg.getRecordIndex(record));
原因是记录中只有组名的值而其他属性不可用。
答案 0 :(得分:0)
启用分组后,所有数据都“转换”到树中,listgrid本身包含组的数据,因此您必须在此树中查找记录。用(修改的)Vittorio Paternostro建议替换最后3行:
Tree tree = lg.getGroupTree();
if (tree != null) {
TreeNode node = tree.find("OID", stdortOID);
if (node != null) {
lg.selectSingleRecord(node);
lg.scrollToRow(getRecordIndex(node));
lg.markForRedraw();
}
}
注意:而不是deselectAllRecords
+ selectRecord
使用简化的selectSingleRecord
。
答案 1 :(得分:-1)
我有同样的需要,以下工作对我来说很好。您可以使用getGroupTree()并在其中搜索所需的属性(列值),而无需担心分组。确保搜索唯一值(即唯一键)以标识精确节点。
Tree tree = getGroupTree();
if (tree != null) {
TreeNode node = tree.find("property", "value");
if (node != null) {
selectSingleRecord(node);
scrollToRow(getRecordIndex(node));
markForRedraw();
}
}