Skip to Content
0
Former Member
Nov 28, 2007 at 01:48 PM

Dynamic creation of ItemListBox and binding a child node

25 Views

Hello @all,

I have the following context structure

root

--category

-- --report

-- -- --id

-- -- --name

-- --id

-- --name

the parent node is "category" with attributes "id" and "name" and the child node is "report" with "id" and "name".

Now I want on an onAction-Event of a Button, that for every category an itemListBox will be created with the according report names. the creation of the itemList is not the problem, but the binding of the datasource and/or the descriptivetext.

my code:

public void initItemListBox( )
  {
    //@@begin initItemListBox()
    IWDView view = wdContext.currentContextElement().getSelectView();
    IWDGroup group = (IWDGroup) view.getElement("ItemListGroup");
    if (group.hasChildren())
    {
      group.removeAllChildren();
    }
    for (int i = 0; i < wdContext.nodeCategory().size(); i++)
    {
      ICategoryElement catEl = wdContext.nodeCategory().getCategoryElementAt(i);
      wdContext.nodeCategory().setLeadSelection(i);
      generateItemLists(wdContext.currentContextElement().getSelectView(), wdContext, catEl);
    }
    //@@end
  }

public void generateItemLists( com.sap.tc.webdynpro.progmodel.api.IWDView view, de.mgi.portaldev.bc.mdw.msi.wdp.IPrivateCRSReportView.IContextNode wdContext, de.mgi.portaldev.bc.mdw.msi.wdp.IPrivateCRSReportView.ICategoryElement category )
  {
    //@@begin generateItemLists()
    //    ItemListBox
    IWDGroup group;

    IWDGroup catGroup;
    IWDLabel label;

    String groupId = "group_" + category.getName();
    catGroup = (IWDGroup) view.createElement(IWDGroup.class, groupId);
    IWDMatrixLayout matrLayout = (IWDMatrixLayout) catGroup.createLayout(IWDMatrixLayout.class);

    String labelId = "label_" + category.getName();
    label = (IWDLabel) view.createElement(IWDLabel.class, labelId);
    label.setText(category.getName());
    IWDMatrixData layout = (IWDMatrixData) label.createLayoutData(IWDMatrixData.class);
    layout.setVAlign(WDCellVAlign.TOP);

    String itemListId = "itemList_" + category.getName();
    IWDItemListBox itemListBox = (IWDItemListBox) view.createElement(IWDItemListBox.class, itemListId);
    label.setLabelFor(itemListId);
    IWDMatrixData itemlayout = (IWDMatrixData) itemListBox.createLayoutData(IWDMatrixData.class);
    itemListBox.bindDescriptiveText("crsReporting.category.report.name");

    IWDNodeInfo reportNodeInfo = category.nodeReport().getNodeInfo();
//    itemListBox.bindText(reportNodeInfo.getAttribute("name"));
    itemListBox.setVisibleItems(5);
    IWDMatrixHeadData matrixHead = (IWDMatrixHeadData) itemListBox.createLayoutData(IWDMatrixHeadData.class);

    IWDAction itemListAct = (IWDAction) wdThis.wdGetItemSelectAction();
    itemListBox.setOnLeadSelect(itemListAct);

//    itemListBox.bindDataSource(reportNodeInfo);
    itemListBox.bindDataSource("crsReporting.category.report");

    catGroup.addChild(label);
    catGroup.addChild(itemListBox);
    group = (IWDGroup) view.getElement("ItemListGroup");
    group.addChild(catGroup);

    //    END ITEMLIST
    //@@end
  }

What am I doing wrong? in every ItemListbox there are only the report names of the last category.

thanks.