如何在分组的smartgwt listgrid中选择记录?

时间:2012-04-25 07:12:11

标签: smartgwt listgrid

我的网站包含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));

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

2 个答案:

答案 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();
        }
    }