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.
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 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); }
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);
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;
}
}
}