I have 5 columns , out of which if data of 4 columns are repeating , the 5th column needs to be grouped.
Name Designation Email Phone Module
So if we have multiple modules assigned to a single person , one single row needs to be displayed.
Trial so far :
Storing data from 3rd party into map in 4 column key + value format
mapAccountTeam.put(Con.Name+Con.Designation+Con.Email+Con.Phone, contactList);
Wrapper Class
public Class GroupWrapper {
public List<Type> contactWrapperList {get; set;}
public String groupedVal {get; set;}
public Integer count {get {return contactWrapperList.size(); } set;}
}
Not sure how to model the two apex repeat based on the key/value.
Can somebody help?
Controller:
for(CustomerContact__c CustCon : contactList){
if(mapModule.containsKey(CustCon.Name+CustCon.Designation+CustCon.Email+CustCon.Phone)) {
List<ContactWrapper> conWrapperList = mapModule.get(CustCon.Name+CustCon.Designation+CustCon.Email+CustCon.Phone);
ContactWrapper conWrapObj = new ContactWrapper();
conWrapObj.name = CustCon.Name;
conWrapObj.name = CustCon.Designation;
conWrapObj.name = CustCon.Module;
conWrapObj.name = CustCon.Email;
conWrapObj.name = CustCon.Phone;
conWrapperList.add(conWrapObj);
mapModule.put(CustCon.Name+CustCon.Designation+CustCon.Email+CustCon.Phone, conWrapperList);
}
else
{
List<ContactWrapper> conWrapperList = new List<ContactWrapper>();
ContactWrapper conWrapObj = new ContactWrapper();
conWrapObj.name = CustCon.Name;
conWrapObj.name = CustCon.Designation;
conWrapObj.name = CustCon.Module;
conWrapObj.name = CustCon.Email;
conWrapObj.name = CustCon.Phone;
conWrapperList.add(conWrapObj);
mapModule.put(CustCon.Name+CustCon.Designation+CustCon.Email+CustCon.Phone, conWrapperList);
}
}
moduleList = new List<String>(mapModule.keySet());
system.debug('moduleList'+moduleList);
VF:
<apex:repeat id="myRepeatHeader" value="{!moduleList}" var="key">
<tr>
<td rowspan="{!mapModule[key].size()}">
<apex:outputText value="{!mapModule[key].Name}"/>
<apex:outputText value="{!mapModule[key].Designation}"/>
<apex:outputText value="{!mapModule[key].Email}"/>
<apex:outputText value="{!mapModule[key].Phone}"/>
</td>
<apex:repeat id="contactDetails" value="{!mapModule[key]}" var="con">
<tr>
<td><apex:outputText value="{!con.Module}"/></td>
</tr>
</apex:repeat>
</tr>
</apex:repeat>
Table :
Name Designation Email Phone Module
Roger Manager abcd@abcd.com 555 Module 5 Module 6
Rita Senior Manager xyz@abcd.com 222 Module 1 Module 2
Best Answer
I will take this approach to prepare the structure like this:
Visualforce
I have tried to visualize like this:
At my dev org, it is showing like this. I am not showing designation column
To get a help on how to use rowspan, refer td row span