I have 2 lists list<Attachment>
and list<Calls__C>
.
The relation is Attachment.parentid=CAlls__c.Account__C
. Now I want single repeat that will traverse through these two lists in pageblocktable.
column1> Calls__c.name
column2> CAlls__c.Account__r.name
Column3> Attachment.ParentId
Column4> Attachment.Id
Please find the apex page & controller as Kevin suggested. I guess controller is fine,page having some issue. Apex page:
<apex:page controller="attachmentCallsWrapper_parent">
<apex:panelGrid columns="5" border="1" >
<apex:dataTable value="{!callWrapper}" var="cw">
<apex:column >
<apex:facet name="header" >SEQ</apex:facet>
<apex:outputText value="{!cw.sequence}" />
</apex:column>
<apex:column >
<apex:facet name="header" >Call Name</apex:facet>
<apex:outputText value="{!cw.callName}" />
</apex:column>
<apex:column >
<apex:facet name="header" >Account Name</apex:facet>
<apex:outputText value="{!cw.accountName}" />
</apex:column>
<apex:column >
<apex:facet name="header" >Call Id</apex:facet>
<apex:outputText value="{!cw.callId}" />
</apex:column>
<apex:column >
<apex:facet name="header" >Attachment Id</apex:facet>
<apex:outputText value="{!cw.attachmentId}" />
</apex:column>
</apex:dataTable>
</apex:panelgrid>
</apex:page>
Controller:
public class attachmentCallsWrapper_parent{
public void attachmentCallsWrapper_parent(){}
public List<attachmentCallsWrapper> callWrapper {get;set;}
public list<CAll2_vod__C> mycalls=[select id,name,account_vod__C from CAll2_vod__C where account_vod__C=:ApexPages.currentPage().getParameters().get('id') ];
// construct a map for calls/attachments
// using set to avoid duplicate attachmentIds, unlikely, if any happened to be found
map<id,set<attachment>> mapCallAttachments = new map<id,set<attachment>>();
public void method1(){
for (Attachment atf : [Select Id,Name from attachment where parentId = :ApexPages.currentPage().getParameters().get('id')]) {
if (mapCallAttachments.containsKey(atf.ParentId)) {
set<attachment> satf = mapCallAttachments.get(atf.ParentId);
satf.add(atf);
mapCallAttachments.put(atf.ParentId,satf);
} else {
set<attachment> satf = new set<attachment>();
satf.add(atf);
mapCallAttachments.put(atf.ParentId,satf);
}
}
// using map, re-iterate through list
for (Call2_vod__c c : myCalls) {
if (mapCallAttachments.containskey(c.Id)) {
set<attachment> satf = mapCallAttachments.get(c.Id);
for (attachment atf : satf) {
attachmentCallsWrapper cw = new attachmentCallsWrapper(c,atf);
cw.sequence = callWrapper.size()+1;
callWrapper.add(cw);
}
} else {
attachmentCallsWrapper cw = new attachmentCallsWrapper(c,null);
cw.sequence = callWrapper.size()+1;
callWrapper.add(cw);
}
}
}
}