Visualforce Page:
<apex:page controller="dynamicColumns">
<apex:Form >
<apex:pageBlock >
<apex:pageBlockButtons location="top">
<apex:commandButton action="{!refreshTable}" value="Refresh Table"/>
</apex:pageBlockButtons>
<apex:pageBlockSection >
<apex:pageBlockSectionItem >
<apex:outputLabel value="No of Colums">
</apex:outputLabel>
<apex:inputText value="{!noOfColumns}" />
</apex:pageBlockSectionItem>
</apex:pageBlockSection>
<apex:pageBlockSection collapsible="true" title="Search Result" columns="1">
<apex:PageBlockTable columns="{!listFieldToShow.size}" value="{!listTableResult}" var="rowItem">
<apex:repeat value="{!listFieldToShow}" var="colItem">
<apex:column >
<apex:facet name="header" >{!mapFieldToShow[colItem]}</apex:facet>
<apex:outputLabel value="{!rowItem[mapFieldToShow[colItem]]}"></apex:outputLabel>
</apex:column>
</apex:repeat>
</apex:PageBlockTable>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:Form>
</apex:page>
Apex Class:
public with sharing class dynamicColumns {
public map<String , String> mapFieldToShow{get;set;}
public Integer noOfColumns
{
get;
set
{
listFieldToShow = new List<String>();
if(value == 1)
{
listFieldToShow.add('FirstName');
}
else if(value == 2)
{
listFieldToShow.add('FirstName');
listFieldToShow.add('LastName');
}
else if(value != null && value > 2)
{
listFieldToShow.add('FirstName');
listFieldToShow.add('LastName');
listFieldToShow.add('Email');
}
}
}
public List<String> listFieldToShow {get;set;}
public dynamicColumns()
{
listFieldToShow = new List<String>();
listFieldToShow.add('FirstName');
mapFieldToShow = new Map<String , String>();
mapFieldToShow.put('FirstName' , 'FirstName');
mapFieldToShow.put('LastName' , 'LastName');
mapFieldToShow.put('Email' , 'Email');
listTableResult = [Select FirstName, Lastname, Email from Contact limit 20];
}
public List<Contact> listTableResult {get;set;}
public PageReference refreshTable()
{
return ApexPages.currentpage();
}
}
No comments:
Post a Comment