I am writing a vf page and controller to add multiple child records to the parent at the same time. Sort of like a dynamic related list. I have a table with 1 row to begin with and a method to add rows as needed.

When the Add row button is pressed I need to pass the values from row 1 into the new row.

I have tried to pass them using public string Assessor {get;set;}

but this gets the value when the page is loaded therefore it is empty when I recall it with insertAsstRow()

I need to get the values when the add row button is pressed and then I can populate the new fields from there.

Here is my vf page:

<apex:page controller="AddingAssessmentsController">
<apex:form >
    <apex:variable var="rowNum" value="{!0}"/>
    <apex:pageBlock >            
        <apex:sectionHeader subtitle="Add Assessments"/>
        <apex:variable var="rowNum" value="{!0}"/>
        <apex:pageBlockTable value="{!AssessmentList}" var="asst">
            <apex:facet name="footer">
                <apex:commandLink value="Add" action="{!insertAsstRow}"/>
            <apex:column headerValue="Name">
                <apex:inputField value="{!asst.Name}"/>
            <apex:column headerValue="Last Centre Date">
                <apex:inputField value="{!asst.LastCentreDate__c}" id="LastCentreDate"/>
            <apex:column headerValue="Date of Tech Review">
                <apex:inputField value="{!asst.DateofTechReview__c}" id="DateOfTechReview"/>
            <apex:column headerValue="Date of Received By Cert Office">
                <apex:inputField value="{!asst.Date_Received_By_Cert_Office__c}" id="Date_Received_By_Cert_Office"/>
            <apex:column headerValue="Assessor">
                <apex:inputField value="{!asst.Assessor__c}" id="Assessor"/>
            <apex:column headerValue="Verifier">
                <apex:inputField value="{!asst.Verifier__c}" id="Verifier"/>
            <apex:column headerValue="Photo Scanned">
                <apex:inputcheckbox value="{!asst.Photo_Scanned__c}" id="photoscanned" selected="true"/>
            <apex:column headerValue="Photo Scan date">
                <apex:inputfield value="{!asst.Photo_Scan_Date__c}" id="photo_scan_date"/>
            <apex:column headerValue="Fastrack">
                <apex:inputcheckbox value="{!asst.Fastrack__c}" id="Fastrack"/>
            <apex:column headerValue="MOT Cert">
                <apex:inputcheckbox value="{!asst.MOT_Cert__c}" id="Mot_cert"/>
            <apex:column headerValue="Pass?">
                <apex:inputcheckbox value="{!asst.Pass__c}" id="pass" selected="true"/>
            <apex:column headerValue="Delete" >
                <apex:commandLink style="font-size:15px; font-weight:bold; text-align:center;color:red;" value="X" action="{!delAsstRow}">
                    <apex:param value="{!rowNum}" name="index" />
                <apex:variable var="rowNum" value="{!rowNum+1}"/>
        <apex:pageBlockButtons location="bottom">
            <apex:commandButton value="Save" action="{!insertAssessments}"/>
            <apex:commandButton value="Back" action="{!cancelAssessments}"/>


public class AddingAssessmentsController {
Id candId;

public List<Assessment__c> AssessmentList {get;set;}
public Integer rowNum{get;set;}

public AddingAssessmentsController(){
    candId = ApexPages.currentPage().getParameters().get('candId');      
    AssessmentList = new List<Assessment__c>();
    AssessmentList.add(new Assessment__c(Candidate__c=candId, pass__c=true, photo_scanned__c=true));

public PageReference insertAssessments(){
    insert AssessmentList;
    PageReference reRender = new PageReference('/'+candId);
    return reRender;

public PageReference cancelAssessments(){
    PageReference reRender = new PageReference('/'+candId);
    return reRender;

public void insertAsstRow(){
    AssessmentList.add(new Assessment__c(Candidate__c=candId));

public void delAsstRow(){
    rowNum = Integer.valueOf(apexpages.currentpage().getparameters().get('index'));

Thanks Joe

1 Answer 1


See if the following works: get the first row of your list, or whichever row you want to copy, pass it in a temporary variable and then create a new row copying all the values you need from the temporary variable.

Please see here:

    public void insertAsstRow(){
        Assesment__c tmpAssesment = AssessmentList.get(rowNum);
        AssessmentList.add(new Assessment__c(Candidate__c=tmpAssesment.candId,

The 'rowNum' would be 0 if you want to copy the first row of your list, or if you want to copy the last record of your list, 'rowNum' would equal to 'AssessmentList.size()-1';

Hope that helps!


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .