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
VINODKUMAR REDDY KALUVAVINODKUMAR REDDY KALUVA 

Row Number Problem in wrapper calss( visualforce and apex)

Here the problem is whenever I delete the row and add the row it is not refreshing i mean the row numbers are breaking i want this Row Numbers should automatically update if I do any operation.

Please have a look at the Image below:
User-added image

Visualforce Coding:
<apex:page standardController="Invoice_Line_Item__c" extensions="ManageListController" sidebar="false" >
<!--
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
 <script>
        var calculate = function() {
            var val1 = $('[id$=input1]').val();
            var val2 = $('[id$=input2]').val();
           
            var total = parseFloat( val1 ) * parseFloat( val2 );
            //The isNaN() function determines whether a value is an illegal number (Not-a-Number)
            if( !isNaN( total ) ) {
                $( "[id$=result]" ).val( total );
            }
        };
    </script> -->

 <apex:form >
   <apex:pageBlock title="NIN Invoice Line Items">
   
      <apex:pageBlockTable style="width:100%" value="{!wrappers}" var="wrapper" id="wtable">
                        
                        <apex:column headerValue="S.No">
                        <apex:inputField value="{!wrapper.acc.Row_Num__c}" style="width:19px">
                           <!--  <apex:outputText value="{0}" style="text-align:center;">
                              <apex:param value="{!rowNumber+1}" />
                             </apex:outputText>  -->
                           <apex:param name="nextIdent" value="{!wrapper.acc.Row_Num__c}" assignTo="{!nextIdent}"/>
                        </apex:inputfield>
                        </apex:column>
                        
                        <apex:column headerValue="S.No"><apex:outputText value="{!wrapper.ident}">
                        
                       
                        
                        <apex:param name="ident" value="{!wrapper.ident}" assignTo="{!ident}"/>
                        </apex:outputtext>
                        </apex:column>
                        <apex:column headerValue=" Part No"><apex:inputField value="{!wrapper.acc.Name}"  /></apex:column>
                        <apex:column headerValue="Description"><apex:inputField value="{!wrapper.acc.Description__c}" style="height:30px" /></apex:column>
                        <apex:column headervalue="Part No"><apex:inputField value="{!wrapper.acc.Part_No__c}" style="width:150px" /></apex:column>
                        <apex:column headerValue="HN"><apex:inputField value="{!wrapper.acc.N__c}" style="width:60px"/></apex:column>
                        <apex:column headervalue="Quaty"><apex:inputField value="{!wrapper.acc.Quy__c}"  style="width:60px">
                         <apex:actionSupport event="onchange" rerender="tot"/> 
                         <!--<apex:param name="qty" value="{!wrapper.acc.Quantity__c}" assignTo="{!Quantity}"/>-->
                         </apex:inputField>
                        </apex:column>
                        <apex:column headerValue="Raem)"><apex:inputField value="{!wrapper.acc.Rate_m__c}"  style="width:80px">
                         <apex:actionSupport event="onchange" rerender="tot"/>
                         </apex:inputField>
                        </apex:column>
                        <apex:column headerValue="Total">
                        <apex:outputPanel >
                          <apex:outputText id="tot" value="{!(wrapper.acc.Quantity__c*wrapper.acc.Ra_Item__c)}"> 
                      
                        <apex:param value="totl" assignTo="{!wrapper.acc.Total__c}" />
                         <apex:actionSupport event="onchange" rerender="to"/>
                        </apex:outputText>
                        <apex:actionSupport event="onchange" rerender="to"/>
                       
                         </apex:outputPanel>
                        </apex:column>
                   
                        <apex:column headerValue="Dt"><apex:inputField value="{!wrapper.acc.D__c}" style="width:60px">
                        <apex:actionSupport event="onchange" rerender="to"/>
                        </apex:inputField>
                        </apex:column>
                        <apex:column headerValue="TValue">
                        <apex:outputText id="to" value="{!((wrapper.acc.Quantity__c*wrapper.acc.Rate___c)-wrapper.acc.Discount__c)}"/>
                    
                        </apex:column>
                       
                        <apex:column headerValue="T">
                        
                        <apex:inputField value="{!wrapper.acc.IT__c}" style="width:30px" />
                        
                        </apex:column>
                        
                        <apex:column headerValue="ST">
                        
                        <apex:inputField value="{!wrapper.acc.T__c}" style="width:30px" />
                       
                        </apex:column>
                        <apex:column headerValue="ST"><apex:inputField value="{!wrapper.acc.CT__c}" style="width:30px" />
                    
                        </apex:column> 
                        <apex:column headerValue="Action">
                          <apex:commandButton value="Delete" action="{!delWrapper}" rerender="wtable">
                             <apex:param name="toDelIdent" value="{!wrapper.ident}" assignTo="{!toDelIdent}"/> 
                          </apex:commandButton>
                        </apex:column>
      </apex:pageBlockTable>
      
      <apex:pageblockButtons location="top">
      <apex:commandButton value="Add Row" action="{!addRows}" rerender="wtable">
         <apex:param name="addCount" value="1" assignTo="{!addCount}"/> 
      </apex:commandButton>
      <apex:commandButton value="Add 5 Rows" action="{!addRows}" rerender="wtable">
         <apex:param name="addCount" value="5" assignTo="{!addCount}"/> 
      </apex:commandButton>
      <apex:commandButton value="Save" action="{!save}"/>
      <apex:commandButton value="Cancel" action="{!Cancel1}" immediate="true" html-formnovalidate="formnovalidate" />
      </apex:pageblockButtons>
   </apex:pageBlock>
 </apex:form>
</apex:page>
Apex class:
 
public class ManageListController 
{
         public List<AccountWrapper> wrappers {get; set;}
         public static Integer toDelIdent {get; set;}
        
         public static Integer addCount{get; set;}
         public static Integer addCoun{get; set;}
         Public Integer nextIdent=1;
         public Id par{get;set;}
         public string partno{get;set;}
  
         
  public ManageListController(ApexPages.StandardController controller) {
      
          par=apexpages.currentpage().getparameters().get('Inice');     
          partno=apexpages.currentpage().getparameters().get('partno');
          addcoun=Integer.valueof(partno.trim());
          wrappers=new List<AccountWrapper>();
          for (Integer idx=0; idx<addcoun; idx++)
          {
           wrappers.add(new AccountWrapper(nextIdent++));
          }
          
          system.debug(addcount);
          system.debug(par);
          system.debug(partno);
          
  }
   Public Void RowNumd(){
       
       
       
   }
 public void delWrapper()
 {
  Integer toDelPos=-1;
  for (Integer idx=0;idx<wrappers.size();idx++)
  {
   if (wrappers[idx].ident==toDelIdent)
   {
    toDelPos=idx;
   }
  }
   
  if (-1!=toDelPos)
  {
   wrappers.remove(toDelPos);
  }
 }
  
 public void addRows()
 {
 
  for (Integer idx=0; idx<addCount; idx++)
  {
  system.debug(idx);
  system.debug(addcount);
   wrappers.add(new AccountWrapper(nextIdent++));
  }
 }
  
 public PageReference save()
 {
  List<Invoice_Line_Item__c> accs=new List<Invoice_Line_Item__c>();
  for (AccountWrapper wrap : wrappers)
  {
     //wrap.acc.total__c=wrap.acc.Quantity__c*wrap.acc.Rate_Per_Item__c;
    // wrap.acc.Taxable_Value__c=wrap.acc.total__c-wrap.acc.Discount__c;
    
    
    wrap.acc.NIice__c=par;
    wrap.acc.CurrencyIsoCode='INR';
    accs.add(wrap.acc);
    //System.debug(cgs);
   //accs.add(wrap.acc.NIN_Invoice__c=par);
  }
   
  insert accs;
  
   
   return new pageReference('/'+par);
 
 }
 
 public PageReference Cancel1(){
   PageReference page = new PageReference('/'+Par);
   page.setRedirect(true);
   return page;
 } 


 public class AccountWrapper{
  public Ince_Linm__c acc{get; private set;}

  public Integer ident{get; set;}
  public AccountWrapper(Integer inIdent)
  {
  System.debug(inIdent);
   ident=inIdent;
   acc=new Ince_Linm__c(Row_num__c=Ident);  //Name=' ' + ident
   
  }
 }
}

​​​​​​​
 
Khan AnasKhan Anas (Salesforce Developers) 
Hi Vinod,

Greetings to you!

Please try the below code, it is working fine. Kindly modify the code as per your requirement.

Visualforce:
<apex:page standardController="Account" extensions="AddDeleteRowWithNumberC" sidebar="false">
    <apex:form >
        <apex:pageBlock title="Accounts" id="pb">
            <apex:pageMessages />
            <apex:variable var="rowNumber" value="{!0}"/>
            <apex:pageblockSection columns="1">
                <apex:pageBlockTable title="Contacts" var="acc" value="{!attendeeList}"> 
                    
                    <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="First Name" >
                        <apex:inputField value="{!acc.FirstName}"/>
                    </apex:column> 
                    <apex:column headerValue="Last Name" >
                        <apex:inputField value="{!acc.LastName}"/>
                    </apex:column> 
                    <apex:column headerValue="Phone" >
                        <apex:inputField value="{!acc.Phone}"/>
                    </apex:column> 
                    <apex:column headerValue="Email" >
                        <apex:inputField value="{!acc.Email}"/>
                    </apex:column> 
                    <apex:column headerValue="Action" >
                        <apex:commandButton value="Delete Row" action="{!deleteRow}" reRender="pb">
                            <apex:param name="rowIndex" value="{!rowNumber}"/>
                        </apex:commandButton>
                        <apex:variable var="rowNumber" value="{!rowNumber+1}"/>
                    </apex:column> 
                </apex:pageBlockTable>
                <apex:commandButton action="{!addRow}" value="Add Account" reRender="pb"/>
            </apex:pageblockSection>
            <apex:pageBlockButtons >
                <apex:commandButton value="Save" action="{!ave}" />
                <apex:commandButton value="Cancel" action="{!cancel}"/>
            </apex:pageBlockButtons>
        </apex:pageBlock>
    </apex:form> 
</apex:page>

Controller:
public class AddDeleteRowWithNumberC {
    
    public Account accounts;
    public Contact del;
    public List<Contact> addattendeeList {get;set;}
    public List<Contact> delattendeeList {get;set;}
    public List<Contact> attendeeList {get;set;}
    public Integer totalCount {get;set;}
    public Integer rowIndex {get;set;}
    
    public List<Contact> delAttendees {get; set;} 
    
    public AddDeleteRowWithNumberC(ApexPages.StandardController controller) {       
        accounts = (Account)controller.getRecord();
        attendeeList = [SELECT Id, firstName, LastName, Email, Phone FROM Contact WHERE AccountId =: accounts.Id];
        totalCount = attendeeList.size();
        
        delattendeeList = new List<Contact>();
        delattendees = new List<Contact>();
    }
    
    public void addRow(){
        addattendeeList = new List<Contact>();
        attendeeList.add(new Contact(AccountId = accounts.Id));
    }
    
    public PageReference ave(){        
        upsert attendeeList;
        delete delattendeeList;
        return (new ApexPages.StandardController(accounts)).view();
    } 
    
    public void deleteRow(){        
        rowIndex = Integer.valueOf(ApexPages.currentPage().getParameters().get('rowIndex'));
        del = attendeeList.remove(rowIndex);
        delattendeeList.add(del);        
    }
}

I hope it helps you.

Kindly let me know if it helps you and close your query by marking it as solved so that it can help others in the future.

Thanks and Regards,
Khan Anas