function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
DIVAKAR BABU 15DIVAKAR BABU 15 

create a visual force page display account records in pick list and if we select one account record display releted contacts

Japleen KaurJapleen Kaur
Hello Divakar, 
Below code dates long back, You might need to update few things and take a look at the formatting even.
Let me know if any other is needed.

VF Page
<apex:page controller="VFController10">
     <apex:pageMessages id="err"></apex:pageMessages>
    <apex:form >    
        <apex:actionFunction name="displayData" action="{!displayAccountData}" rerender="detail,detail2,err,wrapId"/>
        <apex:actionFunction name="getContactDetail" action="{!displayContactData}" rerender="detail2">
            <apex:param name="param1" value="" assignTo="{!selectedContactId}"/>
        </apex:actionFunction>
        <apex:actionFunction name="updateEdit" action="{!updateEdit}" rerender="err,wrapId"/>
        
    <apex:selectList value="{!selectedId}" size="1" onchange="displayData()">
        <apex:selectOptions value="{!accountList}"></apex:selectOptions>
    </apex:selectList>
        <br/>
        <br/>
    <apex:outputPanel id="detail">
        <apex:outputPanel rendered="{!selectedId!=NULL}">
             <table border="1">
                    <tr>
                        <th>Name</th>
                        <th>OwnerName</th>
                    </tr> 
                    <tr>
                        <td>{!selectedAccount.Name}</td>
                        <td>{!selectedAccount.Owner.Name}</td>
                    </tr>
             </table>
            <br/>
            <br/>
            <table border="1" id="detail3">
                <tr>
                    <th>Action</th>
                    <th>Name</th>
                    <th>Email</th>
                </tr>
        <apex:repeat value="{!conList}" var="con">
            <tr>
                <td><a href="javascript:void(0);" onclick="getContactDetail('{!con.Id}');">Edit</a></td>            
                <td>{!con.Name}</td>
                <td>{!con.Email}</td>
            </tr>    
        </apex:repeat>
             </table>
        </apex:outputPanel> 
    </apex:outputPanel>
        <br/>
        
    <apex:outputPanel id="detail2">
        <apex:outputPanel rendered="{!!flagshow}">
        <apex:outputPanel rendered="{!selectedContactId!=NULL}">
            <table border="1">
                <tr>
                    <th>First Name</th>
                    <th>Last Name</th>
                    <th>Email</th>
                </tr>
                <tr >
                    <td><apex:inputField value="{!selectedContact.FirstName}"/></td>
                    <td><apex:inputField value="{!selectedContact.LastName}"/></td>
                    <td><apex:inputField value="{!selectedContact.Email}"/></td>
                    
                </tr>
                <tr>
                    <td><apex:commandButton value="Update" action="{!updateContact}" rerender="detail,detail2,err"/></td>
                </tr>
            </table>
            </apex:outputPanel>    
         </apex:outputPanel>
     </apex:outputPanel>
       
        <apex:outputPanel id="wrapId">
        <apex:outputPanel rendered="{!contactWrapperList.size > 0}">
        <table border="1">
                <tr>
                    <th>Action</th>
                    <th>Name</th>
                    <th>Email</th>
                    <th>Date</th>
                </tr>
                 <apex:repeat value="{!contactWrapperList}" var="wrap">
                <tr>
                    <td><apex:inputCheckbox value="{!wrap.isEdit}" onchange="updateEdit();"/></td>            
                    <td><apex:outputField value="{!wrap.conRecord.Name}" rendered="{!!wrap.isEdit}"/>
                        <apex:inputField value="{!wrap.conRecord.FirstName}" rendered="{!wrap.isEdit}"/>
                        <apex:inputField value="{!wrap.conRecord.LastName}" rendered="{!wrap.isEdit}"/>
                    </td>
                    <td><apex:outputField value="{!wrap.conRecord.Email}" rendered="{!!wrap.isEdit}"/>
                        <apex:inputField value="{!wrap.conRecord.Email}" rendered="{!wrap.isEdit}"/>
                    </td>
                    <td>
                        <apex:outputField value="{!wrap.customObj.Date__c}" rendered="{!!wrap.isEdit}"/>
                        <apex:inputField value="{!wrap.customObj.Date__c}" rendered="{!AND(wrap.isEdit,NOT(ISNULL(wrap.customObj.Id)))}"/>
                    </td>
                </tr>    
                </apex:repeat>
                 <tr>
                    <td><apex:commandButton value="Update All" action="{!updateAllRecords}" rerender="detail,detail2,err,wrapId"/></td>
                </tr>
            </table>
            </apex:outputPanel>    
         </apex:outputPanel>
</apex:form>
</apex:page>



CONTROLLER:

public class VFController10 {
    
    public List<SelectOption> accountList{get;set;}
    public List<Contact> conList{get;set;}
    public Id selectedId{get;set;}
    public String selectedContactId{get;set;}
    public Map<Id, Account> accountIdtoRecordMap = new Map<Id, Account>();
    public Map<Id, Contact> contactIdtoRecordMap = new Map<Id, Contact>();
    public Account selectedAccount{get;set;}
    public Contact selectedContact{get;set;}
    Public boolean flagshow{get;set;}
     Public boolean isEdit{get;set;}
    Public List<ContactWrapper> contactWrapperList{get;set;}
    
    public VFController10(){
           accountList = new List<SelectOption>();
        conList = new List<Contact>();
        selectedAccount = new Account();
        selectedContact = new Contact();
        
        contactWrapperList = new List<ContactWrapper>();

        accountList.add(new SelectOption('','None')); //First:Value Second:Label
        for(Account acc : [SELECT Id, Name, AccountNumber, Owner.Name, Owner.Id
                           FROM Account
                          LIMIT 10]){
                              accountList.add(new SelectOption(acc.id,acc.Name));   
                              accountIdToRecordMap.put(acc.Id,acc);
                           }
    }
    public void displayAccountData(){
        conList.clear();
        contactWrapperList.clear();
        selectedAccount = accountIdToRecordMap.get(selectedId);
        for(Contact con : [SELECT Id, FirstName, LastName, Name, Email, AccountId, Account.Name
                  FROM Contact
                       WHERE AccountId =: selectedId]){
                           conList.add(con);
                           contactIdtoRecordMap.put(con.id,con);
                           
                       }
        
           ApexPages.Message msg = new ApexPages.Message(ApexPages.Severity.CONFIRM,'Account Data Displayed');
           ApexPages.addMessage(msg);
        flagshow = true;
        populateWrapperData();
        
    }
    public void displayContactData(){
        selectedContact = contactIdtoRecordMap.get(selectedContactId);
        flagshow = false;
    }
    
    public void updateContact(){
        update selectedContact;
        conList.clear();
        conList = [SELECT Id, FirstName, LastName, Name, Email, AccountId, Account.Name
                  FROM Contact
                       WHERE AccountId =: selectedId];
        ApexPages.Message msg = new ApexPages.Message(ApexPages.Severity.CONFIRM,'Contact Data Displayed');
        ApexPages.addMessage(msg);
        flagshow = true;
    }
    
    /* --------------------------------------------------------------------------------------------------*/
    
    public void populateWrapperData(){
          contactWrapperList = new List<ContactWrapper>();
        List<Contact> tempContactList = new List<Contact>();
        Set<String> emailSet = new Set<String>();
        Map<String, vf_object__c> conToCustMap = new Map<String, vf_object__c>();
        
        
        
        for(Contact con : [SELECT Id, FirstName, LastName, Name, Email, AccountId, Account.Name
                              FROM Contact
                               WHERE AccountId =: selectedId]){
                           tempContactList.add(con);
                           emailSet.add(con.Email);
                          }
        
        for(vf_object__c obj : [SELECT Email__c, Date__c
                                   FROM vf_object__c
                                WHERE Email__c IN: emailSet]){
                                    conToCustMap.put(obj.Email__c, obj);
                                }
        for(Contact cont : tempContactList){
            if(conToCustMap.containskey(cont.Email))
                contactWrapperList.add(new ContactWrapper(false,cont,conToCustMap.get(cont.Email)));
            else
                contactWrapperList.add(new ContactWrapper(false,cont,new vf_object__c()));
         }
    }
    public void updateEdit(){
      //  System.assert(false,contactWrapperList);
    }

    public void updateAllRecords(){
        List<Contact> conUpdateList = new List<Contact>();
        List<vf_object__c> ObjUpdateList = new List<vf_object__c>();
        
        for(ContactWrapper  wl : contactWrapperList) {
            if(wl.isEdit){                    //check whether isEdit = true, Since only those records have to be updated
                conUpdateList.add(wl.conRecord);
                
                if(wl.customObj.Id != null){
                    ObjUpdateList.add(wl.customObj);
                }
            }
        }
        if(conUpdateList.size() > 0){
            update conUpdateList;
        }
        if(ObjUpdateList.size() > 0){
            update ObjUpdateList;
        }
       displayAccountData();
        
    }
    
    public class ContactWrapper{
        Public boolean isEdit{get;set;}
        Public Contact conRecord{get;set;}
        Public vf_object__c customObj{get;set;}
        
        
        Public ContactWrapper(boolean edit,Contact con,vf_object__c cobj){
            conRecord = new Contact();
            customObj = new vf_object__c();
            isEdit=edit;
            conRecord = con;
            customObj = cobj;
        }
    }
}