[SalesForce] Collection size 1,335 exceeds maximum size of 1,000

I am facing this issue while uploading the data using CSV file on VF page with above 1000 Records.

Can any one please help me to overcome this issue.

Here is my code :

public class ItemsUploaderclass
{


    public String[] filelines {get;set;}

    public List<Items__c> uploadlist;


    public ItemsUploaderclass(ApexPages.StandardController controller) {

        filelines = new String[]{};
        uploadlist = new List<Items__c>();
    }

    // Method to read csv file
    public Pagereference ReadFile()
    {

        String[] errors = new List<String>();
        map<String,String> nameToCode = new map<String,String>();
        boolean check = false;

        for (Integer i=1;i<filelines.size();i++){
            String[] inputvalues = new String[]{};
            inputvalues = filelines[i].split(',');
            isoCodeRep = false;
            if(inputvalues.size() == 1) {
                continue;
            }



            Items__c item = new Items__c();
            if(inputvalues[0] != ''){ item.Item_Number__c = inputvalues[0];
            }

            if(inputvalues[1] != '') {item.codeABC__c = inputvalues[1];}
            if(inputvalues[2] != '') {item.Code_XYZ__c = inputvalues[2];}

            if(inputvalues[3] != '') { item.Unit__c = inputvalues[3]; }

            if(inputvalues[4] != '') { item.price__C = inputvalues[4]; }



            if((item.Name!= null && item.Quantity__c != null && item.UnitPrice__c != null && item.CurrencyIsoCode != null && item.Opportunity__c != null && item.Name != 'N/A' && (!isoCodeRep) ))
            {

                uploadlist.add(item);
            }

            else

            ApexPages.addmessage(new ApexPages.Message(ApexPages.severity.FATAL,'Error uploading the items  with number :'+ item.Item_Number__c ));


        }
        if (ApexPages.hasMessages(ApexPages.Severity.FATAL)){
            ApexPages.addmessage(new ApexPages.Message(ApexPages.severity.WARNING,'Upload Failed'));
            return null;
        }

        else
        try{
            insert uploadlist;
            ApexPages.addmessage(new ApexPages.Message(ApexPages.severity.INFO,'File Uploaded Successfully'));
        }catch (Exception e){
            System.debug('Error when inserting item scrubs:' + e);
            ApexPages.Message errormsg = new ApexPages.Message(ApexPages.severity.ERROR,'Error uploading the new item:' + e);

            return null;
        }



    }
    else{   //Display error message when no CSV file is chosen
        ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.ERROR,'Please choose a valid CSV file'));
    }

    return null;
}

public List<Items__c> getuploadeditem()
{
    if (uploadlist!= NULL)
        if (uploadlist.size() > 0)
            return uploadlist;
        else
            return null;
        else
            return null;
    }


}

VF page :

 <apex:pageblocktable value="{!uploadeditem}" var="item" rendered="{!NOT(ISNULL(uploadeditem))}">

          <apex:column headerValue="Number"> 
              <apex:outputText value="{!item.Item_Number__c}"/>
          </apex:column>


          <apex:column headerValue="Unit">
              <apex:outputField value="{!item.Unit__c}"/>
          </apex:column>

          <apex:column headerValue="Price">
              <apex:outputField value="{!item.price__C}"/>
          </apex:column>



     </apex:pageblocktable> 

Best Answer

There is one simple trick to by pass the collection size limit on page.

Instead of using list of objects just use any map like Map<Id,SObject> and your page will never show this error again.


Update : Code for demonstration

Page :

<apex:page controller="AccountLister">
   <apex:form >
        <apex:pageBlock >
           <apex:pageBlockTable value="{!AccountMap}" var="accId">
                <apex:column value="{!AccountMap[accId].Name}"/>
                <apex:column value="{!AccountMap[accId].Type}"/>
            </apex:pageBlockTable>
        </apex:pageBlock>
  </apex:form>
</apex:page>

Controller :

public class AccountLister {
     public Map<ID, Account> AccountMap {get;set;}
    public AccountLister() {
       AccountMap = new Map<ID, account>([SELECT Id, Name, Type FROM Account]);
    }
}

Make sure Account has more than 1000 records for testing.


Update 2 : Maintaining the sort order of records.

Page :

<apex:page controller="AccountLister">
   <apex:form >
        <apex:pageBlock >
           <apex:pageBlockTable value="{!AccountMap}" var="accId">
                <apex:column value="{!AccountMap[accId].Name}"/>
                <apex:column value="{!AccountMap[accId].Type}"/>
                <apex:column value="{!AccountMap[accId].CreatedDate}"/>
            </apex:pageBlockTable>
        </apex:pageBlock>
  </apex:form>
</apex:page>

Controller :

public class AccountLister {
     public Map<Integer , Account> AccountMap {get;set;}
    public AccountLister() {
        AccountMap = new Map<Integer , Account>();
       List<Account> AccountList = [SELECT Id, Name, Type, CreatedDate 
                                          FROM Account
                                          Order By Name];

       for(Integer index = 0 ; index < AccountList.size() ; index++) {
           AccountMap.put(index, AccountList[index]);
       }
    }
}