Blog post

Custom Pagination Example on Visualforce Page in Salesforce

Posted on Jan 12, 2016
by Pradip Shukla
in Salesforce
with 0 comments

Here are the sample codes with the help of that you can build custom pagination functionality in Salesforce using Apex. For this you need to create some Visualforce and one Apex Class.

So let’s enjoy the coding!!!!

Custom Controller Apex Code to get the data from Salesforce

public class clsCustomPagination 
{
    //Variable Declation for Pagination
    public static Integer ROWS_PER_PAGE = 5;
    public integer pageNum {get; set;}
    public boolean pageHasMore {get; set;}
    public boolean pageHasNext {get; set;}
    public boolean pageHasPrev {get; set;}
    public boolean pageHasFirst {get; set;}
    public boolean pageHasLast {get; set;}
    public list<Opportunity> lstAllOpportunity;
    public list<Opportunity> lstPageOpportunity{get;set;}
    public integer tableRowsPerPage{get;set;}
    public string strCurPosition{get;set;}
    public integer intTotalOpp{get;set;}
    public integer firstIndex {get;set;}
    
    //Class Constructor
    public clsCustomPagination()
    {
        strCurPosition = '';
        pageHasNext = false;
        pageHasPrev = false;
        pageHasFirst = false;
        pageHasLast = false;
        pageNum = 1;
        intTotalOpp = 0;
        tableRowsPerPage = 15;
        lstAllOpportunity = new list<Opportunity>();
        lstPageOpportunity = new list<Opportunity>();
        
        lstAllOpportunity = [SELECT Account.Name,AccountId,Amount,CampaignId,CloseDate,Description,ExpectedRevenue,
                                LeadSource,Name,TotalOpportunityQuantity,Type FROM Opportunity where AccountId != null];
                                
        setPaginationNumber();
        DoPaginationOnList();
    }
    
    public void DoPaginationOnList()
    {
        lstPageOpportunity = new list<Opportunity>();
        firstIndex = ((ROWS_PER_PAGE * pageNum) - ROWS_PER_PAGE) ;
        pageHasMore = pageNum < getTotalPages();
        intTotalOpp = lstAllOpportunity.size();
        System.debug('Opportunity 0 is ' +lstAllOpportunity[0]);
        if(intTotalOpp > 0)
        { 
            for(Integer i=firstIndex; i<firstIndex+ROWS_PER_PAGE && intTotalOpp > i; i++)
            {
               lstPageOpportunity.add(lstAllOpportunity.get(i));
            }
            
            if(pageNum >= 1 && pageNum != getTotalPages())
            {
                pageHasNext = true;
                pageHasLast = true;
            }
            else if(pageNum == getTotalPages())
            {
                pageHasNext = false;
                pageHasLast = false;
            }
        }
        else
        {
            pageHasNext = false;
            pageHasPrev = false;
            pageHasLast = false;
            pageHasFirst = false;
        }
        if(lstPageOpportunity.size() == 0)
        {
            ApexPages.addmessage(new ApexPages.message(ApexPages.severity.ERROR,'No record found'));
        }
    }
    
    public void firstPage()
    {
        pageNum = 1;
        pageHasPrev = false;
        pageHasNext = true;
        pageHasFirst = false;
        pageHasLast = true;
        setPaginationNumber();
        DoPaginationOnList();
    }
    
    public void previousPage()
    {
        pageNum--;
        if(pageNum <= 0)
        {
            pageHasPrev = false;
            pageHasNext = true;
        }
        else if (pageNum == 1)
        {
            pageHasPrev = false;
            pageHasNext = true;
        }
        else
        {
            pageHasPrev = true;
            pageHasNext = true;
        }
        setPaginationNumber();
        DoPaginationOnList();
    }
    
    public void nextPage()
    {
        pageNum++;
        pageHasPrev = true;
        pageHasFirst = true;
        setPaginationNumber();
        DoPaginationOnList();
    }
    
    public void lastPage()
    {
        pageNum = getTotalPages();
        pageHasPrev = true;
        pageHasNext = false;
        pageHasFirst = true;
        pageHasLast = false;
        setPaginationNumber();
        DoPaginationOnList();
    }
    
    public Integer getTotalPages()
    {
        if(System.Math.mod(lstAllOpportunity.size(), ROWS_PER_PAGE ) == 0)
            return lstAllOpportunity.size() / ROWS_PER_PAGE ;
        else
            return (lstAllOpportunity.size() / ROWS_PER_PAGE ) + 1;
    }
    
    public void setPaginationNumber()
    {
       strCurPosition = 'Page '+ string.valueof(pageNum)+' of ' + string.valueof(getTotalPages());
    }
}

Visualforce Page Code

<apex:page controller="clsCustomPagination" id="idPage">
    <apex:sectionHeader title="Custom Pagination Example" id="idSecHeader"/>
    <style> 
        .Processing{
         position: fixed;
         background: url('/img/loading32.gif');
         background-repeat: no-repeat;
         background-position: center;
         width: 100%;
         height: 100%;
         z-index: 10004;
         left: 0%;
         top: 0%; 
        }
    </style>
    <apex:form >
        <apex:actionStatus id="idStatus" startStyleClass="Processing" ></apex:actionStatus>
        <apex:pageBlock id="idPB">
            <apex:outputPanel id="pnlOpp">
                <apex:pageBlockTable value="{!lstPageOpportunity}" var="objOpp" id="idPBT">
                    <apex:column value="{!objOpp.Name}"/>
                    <apex:column value="{!objOpp.Account.Name}"/>
                    <apex:column value="{!objOpp.Amount}"/>
                    <apex:column value="{!objOpp.CloseDate}"/>
                </apex:pageBlockTable>
            </apex:outputPanel>
                
            <!-- Start  Pagination Functionality -->
            <apex:outputPanel id="PanelPagination" rendered="{!IF(lstPageOpportunity.size > 0,true,false)}">
                <div style="margin-left:40%;margin-top: 1%;">
                    <table>
                        <tr>
                            <td>
                                <apex:commandButton action="{!firstPage}" disabled="{!NOT(pageHasFirst)}" status="idStatus" id="idBtnFirst" rerender="pnlOpp,PanelPagination" value="|< First"/> 
                                <apex:commandButton action="{!previousPage}" disabled="{!NOT(pageHasPrev)}" status="idStatus" id="idBtnPrev" rerender="pnlOpp,PanelPagination" value="Previous"/>
                            </td>
                            <td>
                                <span style="float:left;font-size: 12px !important;font-weight: bold;margin-top: 1.75%;">
                                    <apex:outputLabel id="pageposition" value="{!strCurPosition}"></apex:outputLabel>
                                </span>
                            </td>
                            <td>
                                <apex:commandButton action="{!nextPage}" disabled="{!NOT(pageHasNext)}" status="idStatus" id="idBtnNext" rerender="pnlOpp,PanelPagination" value="Next"/>
                                <apex:commandButton action="{!lastPage}" disabled="{!NOT(pageHasLast)}" status="idStatus" id="idBtnLast" rerender="pnlOpp,PanelPagination" value="Last >|"/>
                            </td>
                        </tr>
                    </table>
                </div>
            </apex:outputPanel>
            <!-- End  Pagination Functionality -->
        </apex:pageBlock>
    </apex:form>
</apex:page>

....and here we are with finale output.

!!!! Happy Coding !!!!

 

 

 

 


0

Leave your comment

Leave your comment