You need to sign in to do that
Don't have an account?
Inline Editing in case of lot of records
Hi All,
I am trying to achieve inline editing feature for a requirement.
I have a sample code as below :
<apex:page standardController="Contact">
<apex:form >
<apex:pageBlock mode="inlineEdit">
<apex:pageBlockButtons >
<apex:commandButton action="{!edit}" id="editButton" value="Edit"/>
<apex:commandButton action="{!save}" id="saveButton" value="Save"/>
<apex:commandButton onclick="resetInlineEdit()" id="cancelButton" value="Cancel"/>
</apex:pageBlockButtons>
<apex:pageBlockSection >
<apex:outputField value="{!contact.lastname}">
<apex:inlineEditSupport showOnEdit="saveButton, cancelButton"
hideOnEdit="editButton" event="ondblclick"
changedStyleClass="myBoldClass" resetFunction="resetInlineEdit"/>
</apex:outputField>
<apex:outputField value="{!contact.accountId}"/>
<apex:outputField value="{!contact.phone}"/>
</apex:pageBlockSection>
</apex:pageBlock>
</apex:form>
</apex:page>
The only thing that i have a problem is that in order to change a contact i have to append the url everytime with a contact id.
That works only in case of one record.
I have a visual force page, which display lot of contact records in a pageblocksection. How would i pass the id for the record i am editing and saving to this, as i would have many records
Could you please help me out with this requirement
Thanks,
Rajat.
Hi,
You can simply use the commandbutton for each Contact record on VF page and pass the contact id by using apex:param tag so that in controller you will get that value.
////////////////////////// VF Page ////////////////////////////
<apex:page controller="relatedCon" id="p1">
<apex:form >
<apex:outputPanel id="Panel1">
<apex:repeat value="{!ConDetail}" var="c" >
<apex:inlineEditSupport showOnEdit="Update"
hideOnEdit="editButton" event="ondblclick"
changedStyleClass="myBoldClass" resetFunction="resetInlineEdit"/>
<!-- <apex:pageBlock >
<apex:pageBlockButtons >
<apex:commandButton action="{!edit}" id="editButton" value="Edit"/>
<apex:commandButton action="{!Update1}" id="saveButton" value="Save" reRender="opanel1">
<apex:param name="ConId" value="{!c.id}" assignTo="{!ConId}"/></apex:commandbutton>
<apex:commandButton onclick="resetInlineEdit()" id="cancelButton" value="Cancel"/>
</apex:pageBlockButtons>
</apex:pageBlock>-->
<table width="100%" border="0" id="t1">
<tr><td width="25%"><b>Account Name</b></td>
<td width="25%">
<apex:outputField value="{!c.con.accountid}"/>
<!--<apex:inlineEditSupport showOnEdit="Update"
hideOnEdit="editButton" event="ondblclick"
changedStyleClass="myBoldClass" resetFunction="resetInlineEdit"/></apex:outputField>-->
</td></tr>
<tr><td width="25%"><b>Contact LastName</b></td>
<td width="25%">
<apex:outputField value="{!c.con.lastname}"/>
<!--<apex:inlineEditSupport showOnEdit="Update"
hideOnEdit="editButton" event="ondblclick"
changedStyleClass="myBoldClass" resetFunction="resetInlineEdit"/></apex:outputField>-->
</td></tr>
<tr><td width="25%"><b>Contact ID</b></td>
<td width="25%">
<apex:outputField value="{!c.con.id}"/></td></tr>
</table> <br/>
<center><apex:commandButton value="Update" action="{!Update1}" reRender="p1">
<apex:param name="ConId" value="{!c.con.id}" assignTo="{!ConId}"/>
<apex:param name="IndexId" value="{!c.count}" assignTo="{!IndexId}"/>
</apex:commandButton></center>
<hr/>
</apex:repeat>
</apex:outputPanel>
</apex:form>
</apex:page>
////////////////////////////// Controller //////////////////////////////////
public class relatedCon
{
public list<contact> ConDetail1{get;set;}
public list<wrapCon> ConDetail{get;set;}
public id conId{get;set;}
public integer indexId{get;set;}
public relatedCon()
{
ConDetail=new list<wrapCon>();
ConDetail1=[select id,accountid,lastname from contact where accountid =: ApexPages.currentPage().getParameters().get('id')];
system.debug('@@@@@@@@@@@@@@@@' +ConDetail1.size());
integer count=0;
for(contact w : ConDetail1)
{
ConDetail.add(new wrapCon(w,count));
count++;
}
system.debug('%%%%%%%%%%%%%%%%%%%%%%%' +ConDetail);
}
public void Update1()
{
system.debug('@@@@@@@@-------0th last--------@@@@@@@@@' +ConDetail[0].con.lastname);
system.debug('@@@@@@@@-------1st last--------@@@@@@@@@' +ConDetail[1].con.lastname);
system.debug('@@@@@@@@-------2nd last--------@@@@@@@@@' +ConDetail[2].con.lastname);
system.debug('@@@@@@@@@@@@@@@@@' +conId);
contact con2=new contact(id=conId);
// wrapCon w=new wrapCon(con2);
con2.lastname=ConDetail[indexId].con.lastname;
// system.debug(
con2.accountid=ConDetail[indexId].con.accountid;
update con2;
}
public void edit()
{
}
public class wrapCon
{
public contact con{get;set;}
public integer count{get;set;}
public wrapCon(contact con1,integer count)
{
con=con1;
this.count=count;
}
public wrapCon()
{
}
}
}
Did this answer your question? If not, let me know what didn't work, or if so, please mark it solved.
All Answers
Hi,
You can simply use the commandbutton for each Contact record on VF page and pass the contact id by using apex:param tag so that in controller you will get that value.
////////////////////////// VF Page ////////////////////////////
<apex:page controller="relatedCon" id="p1">
<apex:form >
<apex:outputPanel id="Panel1">
<apex:repeat value="{!ConDetail}" var="c" >
<apex:inlineEditSupport showOnEdit="Update"
hideOnEdit="editButton" event="ondblclick"
changedStyleClass="myBoldClass" resetFunction="resetInlineEdit"/>
<!-- <apex:pageBlock >
<apex:pageBlockButtons >
<apex:commandButton action="{!edit}" id="editButton" value="Edit"/>
<apex:commandButton action="{!Update1}" id="saveButton" value="Save" reRender="opanel1">
<apex:param name="ConId" value="{!c.id}" assignTo="{!ConId}"/></apex:commandbutton>
<apex:commandButton onclick="resetInlineEdit()" id="cancelButton" value="Cancel"/>
</apex:pageBlockButtons>
</apex:pageBlock>-->
<table width="100%" border="0" id="t1">
<tr><td width="25%"><b>Account Name</b></td>
<td width="25%">
<apex:outputField value="{!c.con.accountid}"/>
<!--<apex:inlineEditSupport showOnEdit="Update"
hideOnEdit="editButton" event="ondblclick"
changedStyleClass="myBoldClass" resetFunction="resetInlineEdit"/></apex:outputField>-->
</td></tr>
<tr><td width="25%"><b>Contact LastName</b></td>
<td width="25%">
<apex:outputField value="{!c.con.lastname}"/>
<!--<apex:inlineEditSupport showOnEdit="Update"
hideOnEdit="editButton" event="ondblclick"
changedStyleClass="myBoldClass" resetFunction="resetInlineEdit"/></apex:outputField>-->
</td></tr>
<tr><td width="25%"><b>Contact ID</b></td>
<td width="25%">
<apex:outputField value="{!c.con.id}"/></td></tr>
</table> <br/>
<center><apex:commandButton value="Update" action="{!Update1}" reRender="p1">
<apex:param name="ConId" value="{!c.con.id}" assignTo="{!ConId}"/>
<apex:param name="IndexId" value="{!c.count}" assignTo="{!IndexId}"/>
</apex:commandButton></center>
<hr/>
</apex:repeat>
</apex:outputPanel>
</apex:form>
</apex:page>
////////////////////////////// Controller //////////////////////////////////
public class relatedCon
{
public list<contact> ConDetail1{get;set;}
public list<wrapCon> ConDetail{get;set;}
public id conId{get;set;}
public integer indexId{get;set;}
public relatedCon()
{
ConDetail=new list<wrapCon>();
ConDetail1=[select id,accountid,lastname from contact where accountid =: ApexPages.currentPage().getParameters().get('id')];
system.debug('@@@@@@@@@@@@@@@@' +ConDetail1.size());
integer count=0;
for(contact w : ConDetail1)
{
ConDetail.add(new wrapCon(w,count));
count++;
}
system.debug('%%%%%%%%%%%%%%%%%%%%%%%' +ConDetail);
}
public void Update1()
{
system.debug('@@@@@@@@-------0th last--------@@@@@@@@@' +ConDetail[0].con.lastname);
system.debug('@@@@@@@@-------1st last--------@@@@@@@@@' +ConDetail[1].con.lastname);
system.debug('@@@@@@@@-------2nd last--------@@@@@@@@@' +ConDetail[2].con.lastname);
system.debug('@@@@@@@@@@@@@@@@@' +conId);
contact con2=new contact(id=conId);
// wrapCon w=new wrapCon(con2);
con2.lastname=ConDetail[indexId].con.lastname;
// system.debug(
con2.accountid=ConDetail[indexId].con.accountid;
update con2;
}
public void edit()
{
}
public class wrapCon
{
public contact con{get;set;}
public integer count{get;set;}
public wrapCon(contact con1,integer count)
{
con=con1;
this.count=count;
}
public wrapCon()
{
}
}
}
Did this answer your question? If not, let me know what didn't work, or if so, please mark it solved.
Hi
Thanks for the response :)
As a matter of fact, i had solved it some time back on my own
Thanks though,
Rajat
Hi,
Could you please also publish a code showing how to implement inline edit in case of a list shown in a pageblocksection rather than the repeat tag ?
Thanks in advance
Rajat