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
MDV SuryaMDV Surya 

problem to update the Object Field value of Inner Class

I am trying to update the inner class object field value before saving, but not able to do so.

I have 2 object
1. Purchase Details
2. Purchase Items List
Object 1 is master Object and Object 2 is Detailed Object
I had designed a VF page & apex page for capturing the complete data in a single page.
I am able to capture the both Objects data and able to save.
Suppose I want to delete a record from object 2 before saving, yes I am able to do so.
Suppose I want to do changes for a added record in Object 2 before saving. I am not able to do so .
So Please someone guide me on how to achive it.
Please find the below VF & Apex Code.

 

<apex:page standardController="Purchase_Item__c" extensions="PurchaseOrderClass" >
    <apex:form id="form">
        <apex:pageMessages />
        <apex:pageBlock mode="edit">
            <apex:pageBlockButtons >
                <apex:commandButton action="{!doSave}" value="Save" />
                <apex:commandButton action="{!cancel}" value="Cancel" />            
                </apex:pageBlockButtons>
            <apex:pageBlockSection title="Purchase Order Details" columns="2">
                <apex:inputField value="{!myPurchaseOrder.Name}"/>
                <apex:inputField value="{!myPurchaseOrder.Purchase_Date__c}"/>
                <apex:inputField value="{!myPurchaseOrder.Purchase_Order_Type__c}"/>
                <apex:inputField value="{!myPurchaseOrder.Vendor__c}"/>
                <apex:inputField value="{!myPurchaseOrder.Status__c}"/>
            </apex:pageBlockSection>
            <apex:pageblocksection title="Purchase Item Details" id="purchaseItemDetailsSection" columns="3" >
                <apex:inputField value="{!purchaseItemRec.Purchase_Item_Name__c}"  />
                <apex:inputfield value="{!purchaseItemRec.Quantity__c}" />
                <apex:inputfield value="{!purchaseItemRec.Unit_Price__c}" />
            </apex:pageblocksection>
            <div align="center">
                <apex:commandButton action="{!doAdd}" value="add" rerender="purchaseItemDetailsSection,purchaseItemsListSection"  />
            </div>            
            <apex:pageblocksection title="Purchase Items List" id="purchaseItemsListSection">
                <apex:pageBlockTable value="{!purchaseItemsClassList}" var="a">
                    <apex:column headerValue="Indent">
                        <apex:outputText value="{!a.indent}" />
                    </apex:column>
                    <apex:column headerValue="Purchase Items Name">
                        <apex:outputText value="{!a.purchaseItemClsObj.Purchase_Item_Name__c}" rendered="{!a.editDelShow}"/>
                        <apex:inputtext value="{!modPurItmName}" rendered="{!a.doneCancelShow}" />
                    </apex:column>
                    <apex:column headerValue="Purchase Quantity">
                        <apex:outputtext value="{!a.purchaseItemClsObj.Quantity__c}" rendered="{!a.editDelShow}"/>
                        <apex:inputtext value="{!modPurQnty}" rendered="{!a.doneCancelShow}" />
                    </apex:column>
                    <apex:column headerValue="Unit Price">                
                        <apex:outputtext value="{!a.purchaseItemClsObj.Unit_Price__c}" rendered="{!a.editDelShow}"/>
                        <apex:inputtext value="{!modPurUntPr}" rendered="{!a.doneCancelShow}" />  
                    </apex:column>
                    <apex:column headerValue="Action"> 
                        <apex:commandLink value="Edit" action="{!editPurchaseItem}" immediate="true" rendered="{!a.editDelShow}" rerender="purchaseItemsListSection"><apex:param name="editIndent" value="{!a.indent}" assignTo="{!editIndent}"/></apex:commandLink> 
                        <apex:commandLink value="Done" action="{!editDonePurchaseItem}" immediate="true" rendered="{!a.doneCancelShow}" rerender="purchaseItemsListSection"><apex:param name="doneIndent" value="{!a.indent}" assignTo="{!doneIndent}"/></apex:commandLink> / 
                        <apex:commandLink value="Delete" action="{!deletePurchaseItem}" immediate="true" rendered="{!a.editDelShow}" rerender="purchaseItemsListSection"><apex:param name="delIndent" value="{!a.indent}" assignTo="{!delIndent}"/></apex:commandLink> 
                        <apex:commandLink value="Cancel" action="{!editCancelPurchaseItem}" immediate="true" rendered="{!a.doneCancelShow}" rerender="purchaseItemsListSection"><apex:param name="cancelIndent" value="{!a.indent}" assignTo="{!cancelIndent}"/></apex:commandLink>
                    </apex:column>
                </apex:pageBlockTable>
            </apex:pageblocksection>                
        </apex:pageBlock>
    </apex:form>
</apex:page>

 

 

public with sharing class PurchaseOrderClass {

    public Purchase_Order__c myPurchaseOrder;
    public Purchase_Item__c purchaseItemRec {get; set;}
    private Integer nextIdent=0;
    public static Integer editIndent {get; set;}
    public static Integer delIndent {get; set;}
    public static Integer doneIndent {get; set;}
    public static Integer cancelIndent {get; set;}
    
    public static String modPurItmName {get; set;}
    
    public static String getModPurItmName(){
    	return modPurItmName;
    }
    
    public static Decimal modPurQnty {get; set;}
    
    public static Decimal getModPurQnty(){
    	return modPurQnty;
    }
    
    public static Decimal modPurUntPr;
    
    public static Decimal getModPurUntPr(){
    	return modPurUntPr;
    }
    
    public void setModPurUntPr(Decimal arg){
    	modPurUntPr = arg;
    }
    
    public PurchaseOrderClass(ApexPages.StandardController controller) {
        purchaseItemRec = (Purchase_Item__c)Controller.getRecord();
        this.myPurchaseOrder = new Purchase_Order__c();
    }

    public Purchase_Order__c getMyPurchaseOrder(){
            return myPurchaseOrder;
    }
    
    public PageReference doSave()
    {
        insert myPurchaseOrder;
        List<Purchase_Item__c> purItmLst = new List<Purchase_Item__c>();
        for(purchaseItemsRecord purItmClsRec : purchaseItemsClassList){
        	purItmClsRec.purchaseItemClsObj.Purchase_Order__c = this.myPurchaseOrder.id;
        	purItmLst.add(purItmClsRec.purchaseItemClsObj);
        }
        insert purItmLst;
        PageReference pr = new PageReference('/'+this.myPurchaseOrder.id);
        return pr;
    }
    
    public void doAdd(){
            
        purchaseItemsClassList.add(new purchaseItemsRecord(purchaseItemRec,nextIdent++));
        purchaseItemRec = new Purchase_Item__c();
    }
    
    public void editPurchaseItem(){
        for(Integer Idx=0;Idx<purchaseItemsClassList.size();Idx++){
            if(editIndent == purchaseItemsClassList[Idx].indent){
		    	modPurItmName	= purchaseItemsClassList[Idx].purchaseItemClsObj.Purchase_Item_Name__c;
		    	modPurQnty		= purchaseItemsClassList[Idx].purchaseItemClsObj.Quantity__c;
		    	modPurUntPr		= purchaseItemsClassList[Idx].purchaseItemClsObj.Unit_Price__c;
		    	system.debug('in edit method########################');
		    	system.debug('modPurItmName: '+modPurItmName);
            	system.debug('modPurQnty: '+modPurQnty);
            	system.debug('modPurUntPr: '+modPurUntPr);
		    	
                purchaseItemsClassList[Idx].editDelShow=false;
                purchaseItemsClassList[Idx].doneCancelShow=true;
                break;
            }
        }
    }
	
    public void editCancelPurchaseItem(){
        for(Integer Idx=0;Idx<purchaseItemsClassList.size();Idx++){
            if(cancelIndent == purchaseItemsClassList[Idx].indent){
                purchaseItemsClassList[Idx].editDelShow=true;
                purchaseItemsClassList[Idx].doneCancelShow=false;
                break;
            }
        }
    }
	
	public string test{get;set;}
    public void editDonePurchaseItem(){
        for(Integer Idx=0;Idx<purchaseItemsClassList.size();Idx++){
            if(doneIndent == purchaseItemsClassList[Idx].indent){
            	system.debug('in done method########################');
            	system.debug('modPurItmName: '+getModPurItmName());
            	system.debug('modPurQnty: '+getModPurQnty());
            	system.debug('modPurUntPr: '+getModPurUntPr());
		    	purchaseItemsClassList[Idx].purchaseItemClsObj.Purchase_Item_Name__c = modPurItmName;
		    	purchaseItemsClassList[Idx].purchaseItemClsObj.Quantity__c = modPurQnty;
		    	purchaseItemsClassList[Idx].purchaseItemClsObj.Unit_Price__c = modPurUntPr;
                purchaseItemsClassList[Idx].editDelShow=true;
                purchaseItemsClassList[Idx].doneCancelShow=false;
                break;
            }
        }
    }

    public void deletePurchaseItem(){
        for(Integer Idx=0;Idx<purchaseItemsClassList.size();Idx++){
            if(delIndent == purchaseItemsClassList[Idx].indent){
                purchaseItemsClassList.remove(Idx);
                break;
            }
        }
    }
    
    public List<purchaseItemsRecord> purchaseItemsClassList = new List<purchaseItemsRecord>();
    public class purchaseItemsRecord {
        public Purchase_Item__c purchaseItemClsObj{get;set;}
        public Integer indent{get;set;}
        public Boolean editDelShow{get; set;}
        public Boolean doneCancelShow{get; set;}
        public purchaseItemsRecord(Purchase_Item__c purchaseItemClsObjArg,Integer indentArg){
            indent = indentArg;
            purchaseItemClsObj = purchaseItemClsObjArg;
	        editDelShow=true;
	        doneCancelShow=false;
        }
    }
    
    public List<purchaseItemsRecord> getpurchaseItemsClassList(){
        return purchaseItemsClassList;
    }

}

 

Thanks in Advance.

 

Best Answer chosen by Admin (Salesforce Developers) 
MDV SuryaMDV Surya

Thanks bob_buzzard for responding.

After removing the immediate="true" attribute from the Commandlink it is working fine.

and I had also done few change for decreasing the Code. Please find the below latest working code.

 

APEX Class

 

public with sharing class PurchaseOrderClass {

    public Purchase_Order__c myPurchaseOrder;
    public Purchase_Item__c purchaseItemRec {get; set;}
    private Integer nextIdent=0;
    public static Integer editIndent {get; set;}
    public static Integer delIndent {get; set;}
    public static Integer doneIndent {get; set;}
    public static Integer cancelIndent {get; set;}
    
    public PurchaseOrderClass(ApexPages.StandardController controller) {
        purchaseItemRec = (Purchase_Item__c)Controller.getRecord();//adding Test_Case_Log__c records
        this.myPurchaseOrder = new Purchase_Order__c();
    }

    public Purchase_Order__c getMyPurchaseOrder(){
            return myPurchaseOrder;
    }
    
    public PageReference doSave()
    {
    	if(purchaseItemsClassList.size()<1){
    		ApexPages.Message myMsg =new ApexPages.Message(ApexPages.Severity.ERROR, 'Please Add atleast single Purchase Item Details');
			ApexPages.addMessage(myMsg);
			return null;
    	}
        insert myPurchaseOrder;
        List<Purchase_Item__c> purItmLst = new List<Purchase_Item__c>();
        for(purchaseItemsRecord purItmClsRec : purchaseItemsClassList){
            purItmClsRec.purchaseItemClsObj.Purchase_Order__c = this.myPurchaseOrder.id;
            purItmLst.add(purItmClsRec.purchaseItemClsObj);
        }
        insert purItmLst;
        PageReference pr = new PageReference('/'+this.myPurchaseOrder.id);
        return pr;
    }
    
    public void doAdd(){
    	if(purchaseItemRec.Purchase_Item_Name__c==null || purchaseItemRec.Quantity__c==null || purchaseItemRec.Unit_Price__c==null){
    		ApexPages.Message myMsg =new ApexPages.Message(ApexPages.Severity.FATAL, 'Please Enter all Purchase Item Details');
			ApexPages.addMessage(myMsg);
    	}else{
	        purchaseItemsClassList.add(new purchaseItemsRecord(purchaseItemRec,nextIdent++)); //adding record with index to the table
	        purchaseItemRec = new Purchase_Item__c();
    	}
    }
    
    //method for Editing individual row in table basing their index given by editSpecifier
    public void editPurchaseItem(){
        for(Integer Idx=0;Idx<purchaseItemsClassList.size();Idx++){
                system.debug('========='+editIndent);
            if(editIndent == purchaseItemsClassList[Idx].indent){
                purchaseItemsClassList[Idx].editDelShow=false;
                purchaseItemsClassList[Idx].doneCancelShow=true;
                break;
            }
        }
    }
    
    //method for Editing Cancelled individual row in table basing their index given by editSpecifier
    public void editCancelPurchaseItem(){
        for(Integer Idx=0;Idx<purchaseItemsClassList.size();Idx++){
            if(cancelIndent == purchaseItemsClassList[Idx].indent){
                purchaseItemsClassList[Idx].editDelShow=true;
                purchaseItemsClassList[Idx].doneCancelShow=false;
                break;
            }
        }
    }
    
    //method for Editing Done individual row in table basing their index given by editSpecifier
    public void editDonePurchaseItem(){
        for(Integer Idx=0;Idx<purchaseItemsClassList.size();Idx++){
                system.debug('in done method########################'+doneIndent);
            if(doneIndent == purchaseItemsClassList[Idx].indent){
                system.debug('in done method########################'+purchaseItemsClassList[Idx].purchaseItemClsObj);
                purchaseItemsClassList[Idx].editDelShow=true;
                purchaseItemsClassList[Idx].doneCancelShow=false;
                break;
            }
        }
    }

    //method for Deleting individual row in table basing their index given by deleteSpecifier
    public void deletePurchaseItem(){
        for(Integer Idx=0;Idx<purchaseItemsClassList.size();Idx++){
            if(delIndent == purchaseItemsClassList[Idx].indent){
                purchaseItemsClassList.remove(Idx);
                break;
            }
        }
    }
    
    public List<purchaseItemsRecord> purchaseItemsClassList = new List<purchaseItemsRecord>();
    
    //Inner class for Adding passing record with index
    public class purchaseItemsRecord {
        public Purchase_Item__c purchaseItemClsObj{get; set;}
        public Integer indent{get;set;}
        public Boolean editDelShow{get; set;}
        public Boolean doneCancelShow{get; set;}
        
		public purchaseItemsRecord(Purchase_Item__c purchaseItemClsObjArg,Integer indentArg){
            indent = indentArg;
            purchaseItemClsObj = purchaseItemClsObjArg;
            editDelShow=true;
            doneCancelShow=false;
        }
    }
    
    //for getting row along with index
    public List<purchaseItemsRecord> getpurchaseItemsClassList(){
        return purchaseItemsClassList;
    }

}

 

Visualforce Page

 

<apex:page standardController="Purchase_Item__c" extensions="PurchaseOrderClass" tabStyle="VF_Purchase_Order__tab" >
    <apex:form id="form">
        <apex:pageMessages id="pageMsgs"/>
        <apex:pageBlock mode="edit">
            <apex:pageBlockButtons >
                <apex:commandButton action="{!doSave}" value="Save" rerender="pageMsgs"/>
                <apex:commandButton action="{!cancel}" value="Cancel" />            
                </apex:pageBlockButtons>
            <apex:pageBlockSection title="Purchase Order Details" columns="2">
                <apex:inputField value="{!myPurchaseOrder.Name}"/>
                <apex:inputField value="{!myPurchaseOrder.Purchase_Date__c}" required="true"/>
                <apex:inputField value="{!myPurchaseOrder.Purchase_Order_Type__c}" required="true"/>
                <apex:inputField value="{!myPurchaseOrder.Vendor__c}" required="true"/>
                <apex:inputField value="{!myPurchaseOrder.Status__c}" required="true"/>
            </apex:pageBlockSection>
            <apex:pageblocksection title="Purchase Item Details" id="purchaseItemDetailsSection" columns="3" >
                <apex:inputField value="{!purchaseItemRec.Purchase_Item_Name__c}" />
                <apex:inputfield value="{!purchaseItemRec.Quantity__c}" />
                <apex:inputfield value="{!purchaseItemRec.Unit_Price__c}" />
            </apex:pageblocksection>
            <div align="center">
                <apex:commandButton action="{!doAdd}" value="add" rerender="purchaseItemDetailsSection,purchaseItemsListSection,pageMsgs" />
            </div>
            <apex:pageblocksection title="Purchase Items List" id="purchaseItemsListSection">
                <apex:pageBlockTable value="{!purchaseItemsClassList}" var="a" >
                    <apex:column headerValue="Indent">
                        <apex:outputText value="{!a.indent}" />
                    </apex:column>
                    <apex:column headerValue="Purchase Items Name">
                        <apex:inputtext value="{!a.purchaseItemClsObj.Purchase_Item_Name__c}" rendered="{!a.doneCancelShow}" />
                       	<apex:outputText value="{!a.purchaseItemClsObj.Purchase_Item_Name__c}" rendered="{!a.editDelShow}"/>
                    </apex:column>
                    <apex:column headerValue="Purchase Quantity">
                        <apex:inputtext value="{!a.purchaseItemClsObj.Quantity__c}" rendered="{!a.doneCancelShow}"/>
                        <apex:outputtext value="{!a.purchaseItemClsObj.Quantity__c}" rendered="{!a.editDelShow}"/>
                    </apex:column>
                    <apex:column headerValue="Unit Price">                
                        <apex:inputtext value="{!a.purchaseItemClsObj.Unit_Price__c}" rendered="{!a.doneCancelShow}" />  
                        <apex:outputtext value="{!a.purchaseItemClsObj.Unit_Price__c}" rendered="{!a.editDelShow}"/>
                    </apex:column>
                    <apex:column headerValue="Action"> 
                        <apex:commandLink value="Edit" action="{!editPurchaseItem}"  rendered="{!a.editDelShow}" rerender="purchaseItemsListSection"><apex:param name="editIndent" value="{!a.indent}" assignTo="{!editIndent}"/></apex:commandLink> 
                        <apex:commandLink value="Done" action="{!editDonePurchaseItem}"  rendered="{!a.doneCancelShow}" rerender="purchaseItemsListSection"><apex:param name="doneIndent" value="{!a.indent}" assignTo="{!doneIndent}"/></apex:commandLink> / 
                        <apex:commandLink value="Delete" action="{!deletePurchaseItem}"  rendered="{!a.editDelShow}" rerender="purchaseItemsListSection"><apex:param name="delIndent" value="{!a.indent}" assignTo="{!delIndent}"/></apex:commandLink> 
                        <apex:commandLink value="Cancel" action="{!editCancelPurchaseItem}"  rendered="{!a.doneCancelShow}" rerender="purchaseItemsListSection"><apex:param name="cancelIndent" value="{!a.indent}" assignTo="{!cancelIndent}"/></apex:commandLink>
                    </apex:column>
                </apex:pageBlockTable>
            </apex:pageblocksection>                
        </apex:pageBlock>
    </apex:form>
</apex:page>

 

 

 

 

All Answers

bob_buzzardbob_buzzard

You only have one modPurItem and modPurQty property, so every row in the pageblocktable will write the contents of its input back to the same property.    This means that the last row to write back will win.  You'll need to add those properties to the wrapper class, so that each row in the table has its own properties to write back to.  

MDV SuryaMDV Surya

Hello bob_buzzard

      Thanks for replaying. Now I had placed the modPurItmName, modPurQnty and modPurUntPr in Wrapper Class and tested. When I am clicking "Done" Link on vf page it is showing old values, entered update values are not set to the wrapper Class.

bob_buzzardbob_buzzard

Before saving, you'll have to iterate the wrapper classes and copy the values from the properties into the actual sobject fields.

MDV SuryaMDV Surya

bob in "editDonePurchaseItem" method I had already iterated the list and setting the S Object Field value.

Why I had done in this way because I want do save only once i.e., on completion of entering and editing all required data.

bob_buzzardbob_buzzard

You have the immediate attribute set to true - that will discard the user's input.  If you remove that the changes should be persisted.

MDV SuryaMDV Surya

I had commented those two attributes and tested, but the changes are not persisted. 

Bob please find the below log also actually I had entered update values are Item Three, 50, 21 respectively, but the changes are not taking effect.

 

USER_DEBUG|[95]|DEBUG|in done method########################
USER_DEBUG|[96]|DEBUG|modPurItmName: Item One
USER_DEBUG|[97]|DEBUG|modPurQnty: 25
USER_DEBUG|[98]|DEBUG|modPurUntPr: 12.00
 

 

 

MDV SuryaMDV Surya

Is there anyone to helpout in resolving this???????

bob_buzzardbob_buzzard

Can you post your latest code and a description of which fields you populate and which button(s) you press?

MDV SuryaMDV Surya

Thanks bob_buzzard for responding.

After removing the immediate="true" attribute from the Commandlink it is working fine.

and I had also done few change for decreasing the Code. Please find the below latest working code.

 

APEX Class

 

public with sharing class PurchaseOrderClass {

    public Purchase_Order__c myPurchaseOrder;
    public Purchase_Item__c purchaseItemRec {get; set;}
    private Integer nextIdent=0;
    public static Integer editIndent {get; set;}
    public static Integer delIndent {get; set;}
    public static Integer doneIndent {get; set;}
    public static Integer cancelIndent {get; set;}
    
    public PurchaseOrderClass(ApexPages.StandardController controller) {
        purchaseItemRec = (Purchase_Item__c)Controller.getRecord();//adding Test_Case_Log__c records
        this.myPurchaseOrder = new Purchase_Order__c();
    }

    public Purchase_Order__c getMyPurchaseOrder(){
            return myPurchaseOrder;
    }
    
    public PageReference doSave()
    {
    	if(purchaseItemsClassList.size()<1){
    		ApexPages.Message myMsg =new ApexPages.Message(ApexPages.Severity.ERROR, 'Please Add atleast single Purchase Item Details');
			ApexPages.addMessage(myMsg);
			return null;
    	}
        insert myPurchaseOrder;
        List<Purchase_Item__c> purItmLst = new List<Purchase_Item__c>();
        for(purchaseItemsRecord purItmClsRec : purchaseItemsClassList){
            purItmClsRec.purchaseItemClsObj.Purchase_Order__c = this.myPurchaseOrder.id;
            purItmLst.add(purItmClsRec.purchaseItemClsObj);
        }
        insert purItmLst;
        PageReference pr = new PageReference('/'+this.myPurchaseOrder.id);
        return pr;
    }
    
    public void doAdd(){
    	if(purchaseItemRec.Purchase_Item_Name__c==null || purchaseItemRec.Quantity__c==null || purchaseItemRec.Unit_Price__c==null){
    		ApexPages.Message myMsg =new ApexPages.Message(ApexPages.Severity.FATAL, 'Please Enter all Purchase Item Details');
			ApexPages.addMessage(myMsg);
    	}else{
	        purchaseItemsClassList.add(new purchaseItemsRecord(purchaseItemRec,nextIdent++)); //adding record with index to the table
	        purchaseItemRec = new Purchase_Item__c();
    	}
    }
    
    //method for Editing individual row in table basing their index given by editSpecifier
    public void editPurchaseItem(){
        for(Integer Idx=0;Idx<purchaseItemsClassList.size();Idx++){
                system.debug('========='+editIndent);
            if(editIndent == purchaseItemsClassList[Idx].indent){
                purchaseItemsClassList[Idx].editDelShow=false;
                purchaseItemsClassList[Idx].doneCancelShow=true;
                break;
            }
        }
    }
    
    //method for Editing Cancelled individual row in table basing their index given by editSpecifier
    public void editCancelPurchaseItem(){
        for(Integer Idx=0;Idx<purchaseItemsClassList.size();Idx++){
            if(cancelIndent == purchaseItemsClassList[Idx].indent){
                purchaseItemsClassList[Idx].editDelShow=true;
                purchaseItemsClassList[Idx].doneCancelShow=false;
                break;
            }
        }
    }
    
    //method for Editing Done individual row in table basing their index given by editSpecifier
    public void editDonePurchaseItem(){
        for(Integer Idx=0;Idx<purchaseItemsClassList.size();Idx++){
                system.debug('in done method########################'+doneIndent);
            if(doneIndent == purchaseItemsClassList[Idx].indent){
                system.debug('in done method########################'+purchaseItemsClassList[Idx].purchaseItemClsObj);
                purchaseItemsClassList[Idx].editDelShow=true;
                purchaseItemsClassList[Idx].doneCancelShow=false;
                break;
            }
        }
    }

    //method for Deleting individual row in table basing their index given by deleteSpecifier
    public void deletePurchaseItem(){
        for(Integer Idx=0;Idx<purchaseItemsClassList.size();Idx++){
            if(delIndent == purchaseItemsClassList[Idx].indent){
                purchaseItemsClassList.remove(Idx);
                break;
            }
        }
    }
    
    public List<purchaseItemsRecord> purchaseItemsClassList = new List<purchaseItemsRecord>();
    
    //Inner class for Adding passing record with index
    public class purchaseItemsRecord {
        public Purchase_Item__c purchaseItemClsObj{get; set;}
        public Integer indent{get;set;}
        public Boolean editDelShow{get; set;}
        public Boolean doneCancelShow{get; set;}
        
		public purchaseItemsRecord(Purchase_Item__c purchaseItemClsObjArg,Integer indentArg){
            indent = indentArg;
            purchaseItemClsObj = purchaseItemClsObjArg;
            editDelShow=true;
            doneCancelShow=false;
        }
    }
    
    //for getting row along with index
    public List<purchaseItemsRecord> getpurchaseItemsClassList(){
        return purchaseItemsClassList;
    }

}

 

Visualforce Page

 

<apex:page standardController="Purchase_Item__c" extensions="PurchaseOrderClass" tabStyle="VF_Purchase_Order__tab" >
    <apex:form id="form">
        <apex:pageMessages id="pageMsgs"/>
        <apex:pageBlock mode="edit">
            <apex:pageBlockButtons >
                <apex:commandButton action="{!doSave}" value="Save" rerender="pageMsgs"/>
                <apex:commandButton action="{!cancel}" value="Cancel" />            
                </apex:pageBlockButtons>
            <apex:pageBlockSection title="Purchase Order Details" columns="2">
                <apex:inputField value="{!myPurchaseOrder.Name}"/>
                <apex:inputField value="{!myPurchaseOrder.Purchase_Date__c}" required="true"/>
                <apex:inputField value="{!myPurchaseOrder.Purchase_Order_Type__c}" required="true"/>
                <apex:inputField value="{!myPurchaseOrder.Vendor__c}" required="true"/>
                <apex:inputField value="{!myPurchaseOrder.Status__c}" required="true"/>
            </apex:pageBlockSection>
            <apex:pageblocksection title="Purchase Item Details" id="purchaseItemDetailsSection" columns="3" >
                <apex:inputField value="{!purchaseItemRec.Purchase_Item_Name__c}" />
                <apex:inputfield value="{!purchaseItemRec.Quantity__c}" />
                <apex:inputfield value="{!purchaseItemRec.Unit_Price__c}" />
            </apex:pageblocksection>
            <div align="center">
                <apex:commandButton action="{!doAdd}" value="add" rerender="purchaseItemDetailsSection,purchaseItemsListSection,pageMsgs" />
            </div>
            <apex:pageblocksection title="Purchase Items List" id="purchaseItemsListSection">
                <apex:pageBlockTable value="{!purchaseItemsClassList}" var="a" >
                    <apex:column headerValue="Indent">
                        <apex:outputText value="{!a.indent}" />
                    </apex:column>
                    <apex:column headerValue="Purchase Items Name">
                        <apex:inputtext value="{!a.purchaseItemClsObj.Purchase_Item_Name__c}" rendered="{!a.doneCancelShow}" />
                       	<apex:outputText value="{!a.purchaseItemClsObj.Purchase_Item_Name__c}" rendered="{!a.editDelShow}"/>
                    </apex:column>
                    <apex:column headerValue="Purchase Quantity">
                        <apex:inputtext value="{!a.purchaseItemClsObj.Quantity__c}" rendered="{!a.doneCancelShow}"/>
                        <apex:outputtext value="{!a.purchaseItemClsObj.Quantity__c}" rendered="{!a.editDelShow}"/>
                    </apex:column>
                    <apex:column headerValue="Unit Price">                
                        <apex:inputtext value="{!a.purchaseItemClsObj.Unit_Price__c}" rendered="{!a.doneCancelShow}" />  
                        <apex:outputtext value="{!a.purchaseItemClsObj.Unit_Price__c}" rendered="{!a.editDelShow}"/>
                    </apex:column>
                    <apex:column headerValue="Action"> 
                        <apex:commandLink value="Edit" action="{!editPurchaseItem}"  rendered="{!a.editDelShow}" rerender="purchaseItemsListSection"><apex:param name="editIndent" value="{!a.indent}" assignTo="{!editIndent}"/></apex:commandLink> 
                        <apex:commandLink value="Done" action="{!editDonePurchaseItem}"  rendered="{!a.doneCancelShow}" rerender="purchaseItemsListSection"><apex:param name="doneIndent" value="{!a.indent}" assignTo="{!doneIndent}"/></apex:commandLink> / 
                        <apex:commandLink value="Delete" action="{!deletePurchaseItem}"  rendered="{!a.editDelShow}" rerender="purchaseItemsListSection"><apex:param name="delIndent" value="{!a.indent}" assignTo="{!delIndent}"/></apex:commandLink> 
                        <apex:commandLink value="Cancel" action="{!editCancelPurchaseItem}"  rendered="{!a.doneCancelShow}" rerender="purchaseItemsListSection"><apex:param name="cancelIndent" value="{!a.indent}" assignTo="{!cancelIndent}"/></apex:commandLink>
                    </apex:column>
                </apex:pageBlockTable>
            </apex:pageblocksection>                
        </apex:pageBlock>
    </apex:form>
</apex:page>

 

 

 

 

This was selected as the best answer