You need to sign in to do that
Don't have an account?

Incorrect counter for deleting row
Hello Everyone,
I have this VF page that can add new rows of fields and delete a row of fields
My problem is when I delete the first record or the top most record and then delete the second record it deletes the last row of records. After I deleted the first record it deletes the wrong rows of fields and then when I delete the first record then click the 'Add Skill' button it displays the wrong information in the row. Please Help me out. Thank you very much. My code is down below.
My VF page:
<apex:page standardController="Employee_Skills__c" extensions="AddContacts1" sidebar="false"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <apex:form > <apex:pageBlock title="Skill" id="pb"> <apex:pageMessages /> <apex:variable var="rowNumber" value="{!0}"/> <apex:pageBlockTable id="thetable" title="Employee_Skills__c" var="empski" value="{!empskilist}"> <apex:column headerValue="No." style="width:20px; text-align:center;" headerClass="centertext"> <apex:outputText value="{0}" style="text-align:center;"> <apex:param value="{!rowNumber+1}" /> </apex:outputText> </apex:column> <apex:column headerValue="Skill Name" > <apex:inputField value="{!empski.Skill_ID__c}"/> </apex:column> <apex:column headerValue="Proficiency" > <apex:inputField value="{!empski.Proficiency__c}"/> </apex:column> <apex:column headerValue="Skill Type" > <apex:inputField value="{!empski.Skill_Type__c}"/> </apex:column> <apex:column headerValue="Years of Expirience" > <apex:inputField value="{!empski.Year_of_Experience__c }"/> </apex:column> <apex:column headerValue="Action" > <apex:commandButton value="Delete" action="{!deleteRow}" reRender="pb" immediate="true"> <apex:param name="rowIndex" value="{!rowNumber}"/> </apex:commandButton> <apex:variable var="rowNumber" value="{!rowNumber+1}"/> </apex:column> </apex:pageBlockTable> <div align="center" style="margin-top:10px;"> <apex:commandButton action="{!addRow}" value="Add Skill" reRender="pb" immediate="true" /> </div> <apex:pageBlockButtons > <apex:commandButton value="Save" action="{!save}" /> <apex:commandButton value="Cancel" action="{!cancel}"/> </apex:pageBlockButtons> </apex:pageBlock> </apex:form> </apex:page>
My Controller:
public class AddContacts1 { public Employee_Skills__c empskill; public Employee_Skills__c del; public List < Employee_Skills__c > addEmpSkiList {get;set;} public List < Employee_Skills__c > delEmpSkiList {get;set;} public List < Employee_Skills__c > empskilist{get;set;} public Integer totalCount {get;set;} public Integer rowIndex {get;set;} public List < Employee_Skills__c > delEmpSki {get;set;} public AddContacts1(ApexPages.StandardController controller) { empskill= (Employee_Skills__c) controller.getRecord(); empskilist= [SELECT Id,Skill_ID__r.Name,Employee_ID__c,Name,Proficiency__c,Skill_Type__c,Year_of_Experience__c FROM Employee_Skills__c WHERE Employee_ID__c =: empskill.Employee_ID__c]; totalCount = empskilist.size(); delEmpSkiList = new List < Employee_Skills__c > (); delEmpSki = new List < Employee_Skills__c > (); } public void addRow() { addEmpSkiList = new List < Employee_Skills__c > (); empskilist.add(new Employee_Skills__c (Id = empskill.Id,Employee_ID__c = empskill.Employee_ID__c)); } public PageReference save() { upsert empskilist; delete delEmpSkiList ; return null; } public void deleteRow() { rowIndex = Integer.valueOf(ApexPages.currentPage().getParameters().get('rowIndex')); del = empskilist.remove(rowIndex); // if(del.Id != NULL) // { delEmpSkiList.add(del); // } } }
Thank you very much.
Hi @Flint Lockwood,
I try to put the -1 on rowIndex =Integer.valueOf(ApexPages.currentPage().getParameters().get('rowIndex')) and It doesnt work and I have this error when I delete the first record.
System.ListException: List index out of bounds: -1
Error is in expression '{!deleteRow}' in component <apex:commandButton> in page testsample: Class.AddContacts1.deleteRow: line 32, column 1
Do you have another solution to this? Thank you very much
so instead of
<apex:param name="rowIndex" value="{!rowNumber}"/>
try
<apex:param name="skillname" value="{!empski.Skill_ID__c}"/>
In your controller
String skillname = String.valueOf(ApexPages.currentPage().getParameters().get('skillname'));
for(Employee_Skills__c es: empskill){
if(es.Skill_Id__c == skillname){
delEmpSkiList.add(es);
break;
}
}
//perform your dml