2016-04-27 1 views
0

Wie kann ich Felder in jeder Zeile in einer Tabelle in APEX 4.2 summieren, um eine Summe für diese Zeile zu erhalten, bevor ich die Seite absende, um die Seitenprüfung durchzuführen?Summierung von Zeilen in einem Tabellenformular in Apex 4.2 zur Validierung

Zum Beispiel, wenn die erste Reihe 6 in Feld hat a und 6 in Feld b die Summe für die erste Reihe soll 12 und in der zweiten Reihe, wenn Feld b5 ist und Feld c ist 5 die gesamte für die zweite Reihe sollte 10 sein.

Also ich möchte Summen basierend auf Zeilen nicht Spalte. Ist das möglich?

+0

ich schlage vor, Sie eine Funktion machen die Spalte a und b, dann auf benutzerdefinierte Attribute der Spalte b Satz onchange = „function()“ – brenners1302

Antwort

0

Ja, es ist möglich. Wenn Sie Javascript/Jquery kennen, werden Sie mit meiner Lösung gut zurechtkommen. Dies ist, was Sie tun müssen:

Holen Sie sich das Name-Attribut (mit inspect-Element Ihres Browsers) des Feldes, das Sie zusammenfassen möchten. Namen von Feldern in Orakelspitze gehen normalerweise wie 'f01' oder 'f02' und so weiter. Sobald Sie die Felder erhalten, erstellen Sie eine Javascript-Funktion, oder können Sie diese ein, wenn Sie möchten:

function sumUpRows(columnforsum,itemstobeadded){ 
     var numofcols = arguments.length; 
     var numofrows = $("[name=" + arguments[0] + "]").length; 
     var summ = 0; 
     for(x=0;x<numofrows;x++){ 
      for(i=1;i<numofcols;i++){ 
      summ = summ + Number($("[name=" + arguments[i] + "]").eq(x).val()); 
      } 
      $("[name=" + columnforsum + "]").eq(x).val(summ); 
     } 
    } 

Put-Funktion oben in „Funktion und globale Variablendeklaration“ Teil Ihrer Seite. Erstellen Sie dann eine dynamische Aktion "vor dem Senden der Seite". Legen Sie die Aktion „javascript ausführen“, dann setzen Sie diese Codezeile:

sumUpRows("nameoffieldwheresumwillbeassigned","nameofitem1","nameofitem2","nameofitem3"); 

Hier ist ein Beispiel:

sumUpRows("f04","f01","f02","f03"); 

Für Ihre Frage im Kommentarbereich, lautet die Antwort ja. Um die Summe einer Zeile automatisch zu erhalten, wie Sie die Kisten füllen in dieser Zeile, können Sie diese Funktion verwenden:

function sumUpRowsAsYouGo(whatelement){ 
    var numofrows=$("[name=f01]").length; 
    var summ = 0; 
    for(i=0;i<numofrows;i++){ 
     if($(whatelement).attr("id") == $("[name=" + $(whatelement).attr("name") + "]").eq(i).attr("id")){ 
      for(a=1;a<(arguments.length-1);a++){ 
       summ += Number($("[name="+ arguments[a] + "]").eq(i).val()); 
      } 
      $("[name="+ arguments[arguments.length-1] + "]").eq(i).val(summ); 
      break; 
     } 
    } 
} 

Sie diese Funktion wie folgt verwenden können (setzen Sie diese Zeilen in der „Execute auf Seite load“ und „nach Refresh“ dynamische Wirkung Ihrer tabellarisch Region):

$("[name=f01]").change(function(){ 
      sumUpRowsAsYouGo(this,"f01","f02","f03","f04");   
} 
); 

$("[name=f02]").change(function(){ 
      sumUpRowsAsYouGo(this,"f01","f02","f03","f04");   
} 
); 

$("[name=f03]").change(function(){ 
      sumUpRowsAsYouGo(this,"f01","f02","f03","f04");   
} 
); 
+0

fügt Ist gibt es eine Möglichkeit, die Summe zu berechnen, nachdem der Benutzer eine Zahl in das Feld und die Tabulatoren gesetzt hat und das gesamte Feld automatisch aktualisiert wird, anstatt zu warten, bis die Schaltfläche "Senden" gedrückt wird, um die Summe zu erhalten? –

+0

@DarrellLawrence, überprüfen Sie meine Antwort. Ich habe es aktualisiert. – Vance

+0

@DarrellLawrence, Sie vermissen ein weiteres Argument. Geben Sie den Namen der Spalte an, die die Summe als letztes Argument für den Funktionsaufruf abfangen soll. Wenn der Name "f11" lautet, muss die Callback-Funktion jeder Spalte Folgendes enthalten: 'sumUpRowsAsYouGo (this," f04 "," f05 " , "f06", "f07", "f08", "f11"); ' – Vance

Verwandte Themen