Sometimes we may have the requirement of displaying records of any object group by picklist field value.
In order to do this u need to generate 2 lists one is list of records and other is list of picklist field values.Then in visualforce page u can use nested <apex:repeat> and some conditions to display the records group by picklist field value.
The example below will explain it.
Here is the code for Apex Class:
In order to do this u need to generate 2 lists one is list of records and other is list of picklist field values.Then in visualforce page u can use nested <apex:repeat> and some conditions to display the records group by picklist field value.
The example below will explain it.
Here is the code for Apex Class:
public with sharing class GroupBy{ public List<account> accounts {get;set;} public Account ac {get;set;} public String[] states {get;set;} id x; public GroupBy() { ac = [ select Name FROM Account
WHERE id = :ApexPages.currentPage().getParameters().get('id')]; x=ac.id; } public id getQuantity1() { return x; } public void load() { List<String> lstPickvals=new List<String>(); Schema.DescribeFieldResult fieldResult =
account.active__c.getDescribe(); List<Schema.PicklistEntry> ple =fieldResult.getPicklistValues(); system.debug('....'+ple ); for (Schema.PicklistEntry a:ple ){//forall values in picklist list lstPickvals.add(a.getValue());//add value to our final list } system.debug('....'+lstPickvals); // for demo purposes limit the states accounts = [Select ID, Name,active__c From account Where Active__c IN: lstPickvals]; // dynamically create set of unique states from query Set<String> stateSet = new Set<String>(); for (account a : accounts) stateSet.add(a.Active__c); // convert the set into a string array states = new String[stateSet.size()]; Integer i = 0; for (String state : stateSet) { states[i] = state; i++; } } }
The code for visualforce page:
<apex:page controller="GroupBy" action="{!load}" sidebar="false"> <apex:sectionHeader title="My Sample Display Page"
subtitle="Group by picklist field value" description=
"shows how you can dynamically group results by field value."/> <apex:repeat value="{!states}" var="state"> <apex:pageBlock title="{!state}"> <apex:repeat value="{!accounts}" var="account">
<apex:outputPanel rendered="{!IF(state=account.Active__c,true,false)}"> {!account.Name} - {!account.Active__c}<br/> </apex:outputPanel> </apex:repeat> </apex:pageBlock> </apex:repeat> {x} </apex:page>
When we run the visualforce page with accountid,
the output will be as follows