2012-04-25 32 views
0

我有一个listgrid网站和一个带点的openlayers地图。当我点击其中之一时,应用程序应滚动并标记此记录。这与标准listgrid一起工作,但使用分组listgrid它不起作用。如何在分组的smartgwt 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)); 

的原因是,在记录的组名的唯一价值和其他attributs不可用。

+0

取消组合/组作品,但scrollToRow滚动错误的行。 – Rotarius 2012-04-25 08:32:31

回答

0

启用分组,所有的数据都“转化”成树和listgrid本身包含组数据,所以你必须看看你在这棵树的纪录。替换最后3行与(经修饰)维托里奥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

-1

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

Tree tree = getGroupTree(); 
    if (tree != null) { 
     TreeNode node = tree.find("property", "value"); 
     if (node != null) { 
      selectSingleRecord(node); 
      scrollToRow(getRecordIndex(node)); 
      markForRedraw(); 
     } 
    } 
+1

请解释您的解决方案,代码只有答案不是很好的答案。 – markus 2012-10-24 23:03:46

+0

这似乎并没有解决用户特定的代码/情况.... – 2012-10-24 23:03:47