[SalesForce] Adding row inside a row in repeat.

I am adding a row inside a row..Here is the scenario. On Click of add button i am adding a row.i know how to do that..I am able to do that.Now i want to add more rows inside that row using some different button i.e i have adding a row by clicking on main add row button.now i also have a different section inside that row where i can further add rows.

<apex:repeat value="{!wrapperList}" var="wra">
 <apex:pageBlock title="Consolidated Feed">
    <apex:pageBlockSection >
     <table>
           <tr>
             <td>
                <apex:inputField value="{!wra.conFeed.CPF_Quantity__c}"/>
             </td>
           </tr>
     </table>
   </apex:pageBlockSection>  
  </apex:pageBlock>  

     <apex:pageBlock title="test">

      <apex:commandButton action="{!addRowHex}" value="Add new section inside" reRender="hexSec" />
     <apex:pageBlockSection >

               <apex:repeat value="{!wra.excEnti}" var="wrEx">
                 <apex:inputField value="{!wrEx.Name}"/>
                 <apex:inputField value="{!wrEx.Hex_Code__c}"/>
              </apex:repeat>
     </apex:pageBlockSection>   
     </apex:pageBlock>
</apex:repeat>

wrapper class

public object1 conFeed{get;set;}
 public List<object2> excEnti{get;set;}
  public Integer counterWrap{get;set;}

 public wrapperClass(object1 conFeed,List<object2> excEnti)
 {
     this.conFeed=conFeed;
     this.excEnti=excEnti;
 } 
 }


public void addRow(){

       wrapperClass actWrap = new wrapperClass(new object1(),new List<object2>());  
        counter++;
        actWrap.counterWrap = counter; 
        wrapperList.add(actWrap);   

 }


 **public void addRowHex()
 {

 **//I dont know what to write here.//Please help.How to add a row inside of the first row added**

 }**

Best Answer

The below example should get you started on what you want to achieve. You can try it out separately as it uses the standard Account and Contact objects.

Page:

<apex:page controller="NestedTableLogicClass">
<apex:form >
<apex:commandButton value="Add Outer" action="{!addOuter}" rerender="panel"/>

<apex:outputPanel id="panel">
     <table>
     <apex:repeat value="{!myWrapperObject}" var="key">
      <tr>
        <td><apex:inputField value="{!myWrapperObject[key].objectVar.Name}" /></td>
        <td><apex:commandButton value="Add Inner Row" action="{!addInnerRow}" rerender="panel">
            <apex:param value="{!key}" name="row" assignTo="{!row}"/>
            </apex:commandButton>
            <table>
              <apex:repeat value="{!myWrapperObject[key].innerList}" var="innerListVar">
                <tr>
                  <td><apex:inputField value="{!innerListVar.lastName}" /></td>
                </tr>                
              </apex:repeat>
            </table>
        </td>
      </tr>
     </apex:repeat>
     </table>
</apex:outputPanel>
</apex:form>
</apex:page>

Controller:

public class NestedTableLogicClass{

  public Map<Integer,WrapperClass> myWrapperObject{get; set;}
  public Integer counter {get; set;}

  public Integer row {get; set;}

  public class WrapperClass{

    public List<Contact> innerList {get; set;}
    public Account objectVar{get; set;}

    public WrapperClass(){      
      this.innerList = new List<Contact>();
      this.objectVar = new Account();
    }
  }

  public NestedTableLogicClass(){
    counter = 0;
    myWrapperObject = new Map<Integer,WrapperClass>();

    /* Adding one outer row on page load*/
    addOuter(); 

  }

  public void addOuter(){
    counter++;
    myWrapperObject.put(counter,new WrapperClass());

    /* Add one inner row everytime an outer row is created */
    row = counter;
    addInnerRow();
  }

  public void addInnerRow(){
    myWrapperObject.get(row).innerList.add(new Contact());

  }
}
Related Topic