Saturday, March 16, 2013

Displaying the records with required no.of columns


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