There are two ways of writing a code, the hard way and the best way, Of-course the hard way is the easy way and best way if always hard way. If this sentence seems hard to understand, understand it is for the best. When developing a VF page, the most important we need is pagination, throwing the large chunk of data on user screen is going to give the user goose bump. After trying a dozen method I came to know the easiest way of implementing pagination using standard set controller on a custom controller. The demo of the code is available here The visualforce Page: <apex:page controller="OpportunityPagination" showheader="false"> <apex:form> <apex:pageblock id="ThePageBlock"> <apex:pageblocktable value="{!opportunities}" var="o"> <apex:column value="{!o.name}"> <apex:column value="{!o.closedate}">