1

I have a Visualforce page with a page block table which contains multiple rows based on the search result. Now I need to select multiple rows using checkbox and on button click need to pass the id's of selected rows to controller and perform insert operation in another object with the id's that i received. Can anyone help?

   <apex:pageBlock>
       <apex:pageblockSection title="Details" columns="1">
        <apex:pageblockTable value="{!Char}" var="pc">
             <apex:column headerValue="Action">
                 <apex:inputcheckbox/>
             </apex:column>
             <apex:column headerValue="Name" value="{!pc.Name}"/>  
             <apex:column headerValue="Species" value="{!pc.Species__c}"/>  
             <apex:column headerValue="Breed" value="{!pc.Pet_Breed__c}"/>  
        </apex:pageblockTable> 
       </apex:pageblockSection> 
       <apex:pageblockButtons location="bottom">
            <apex:commandButton action="{!performInsert}" style="margin-left:25%;" value="Insert">
       </apex:pageblockButtons>
   </apex:pageBlock>

1 Answer 1

2

For this we use Wrapper class pattern.

Here is example for you https://developer.salesforce.com/page/Wrapper_Class

Controller:

public class wrapperClassController {

//Our collection of the class/wrapper objects cContact 
public List<cContact> contactList {get; set;}

//This method uses a simple SOQL query to return a List of Contacts
public List<cContact> getContacts() {
    if(contactList == null) {
        contactList = new List<cContact>();
        for(Contact c: [select Id, Name, Email, Phone from Contact limit 10]) {
            // As each contact is processed we create a new cContact object and add it to the contactList
            contactList.add(new cContact(c));
        }
    }
    return contactList;
}


public PageReference processSelected() {

            //We create a new list of Contacts that we be populated only with Contacts if they are selected
    List<Contact> selectedContacts = new List<Contact>();

    //We will cycle through our list of cContacts and will check to see if the selected property is set to true, if it is we add the Contact to the selectedContacts list
    for(cContact cCon: getContacts()) {
        if(cCon.selected == true) {
            selectedContacts.add(cCon.con);
        }
    }

    // Now we have our list of selected contacts and can perform any type of logic we want, sending emails, updating a field on the Contact, etc
    System.debug('These are the selected Contacts...');
    for(Contact con: selectedContacts) {
        system.debug(con);
    }
    contactList=null; // we need this line if we performed a write operation  because getContacts gets a fresh list now
    return null;
}


// This is our wrapper/container class. A container class is a class, a data structure, or an abstract data type whose instances are collections of other objects. In this example a wrapper class contains both the standard salesforce object Contact and a Boolean value
public class cContact {
    public Contact con {get; set;}
    public Boolean selected {get; set;}

    //This is the contructor method. When we create a new cContact object we pass a Contact that is set to the con property. We also set the selected value to false
    public cContact(Contact c) {
        con = c;
        selected = false;
    }
}
}

Page

<apex:page controller="wrapperClassController">
    <apex:form >
        <apex:pageBlock >
            <apex:pageBlockButtons >
                <apex:commandButton value="Process Selected" action="{!processSelected}" rerender="table"/>
            </apex:pageBlockButtons>
            <!-- In our table we are displaying the cContact records -->
            <apex:pageBlockTable value="{!contacts}" var="c" id="table">
                <apex:column >
                    <!-- This is our selected Boolean property in our wrapper class -->
                    <apex:inputCheckbox value="{!c.selected}"/>
                </apex:column>
                <!-- This is how we access the contact values within our cContact container/wrapper -->
                <apex:column value="{!c.con.Name}" />
                <apex:column value="{!c.con.Email}" />
                <apex:column value="{!c.con.Phone}" />
            </apex:pageBlockTable>
        </apex:pageBlock>
    </apex:form>
</apex:page>
1
  • This idea might help. I will try to implement it and get back if facing any issues. Thanks.
    – Ean
    Mar 30, 2016 at 5:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.