1

我有一个带有 listgrid 的站点和一个带有点的 openlayers 地图。当我点击其中一个时,应用程序将滚动并标记此记录。这适用于标准列表网格,但对于分组列表网格它不起作用。

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));

原因是记录中只有组名的值,其他属性不可用。

4

2 回答 2

0

启用分组后,所有数据都“转换”为树,并且 listgrid 本身包含组数据,因此您必须在此树中查找记录。将最后 3 行替换为(修改后的)Vittorio Paternostro 建议:

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.

于 2013-07-26T12:34:18.707 回答
-1

我有同样的需求,以下对我来说很好。您可以使用 getGroupTree() 并在其中搜索所需的属性(列值),而无需担心分组。确保搜索唯一值(即唯一键)以识别精确节点。

    Tree tree = getGroupTree();
    if (tree != null) {
        TreeNode node = tree.find("property", "value");
        if (node != null) {
            selectSingleRecord(node);
            scrollToRow(getRecordIndex(node));
            markForRedraw();
        }
    }
于 2012-10-24T22:40:15.677 回答