2016-08-31 3 views
0

Ich möchte die Summe einer Gridview-Spalte in einem Textfeld anzeigen. Wenn die Seite geladen wird, sollte die Summe in das Textfeld übertragen werden. Ich habe den folgenden JavaScript-Code in meine index.php-Datei geschrieben. Aber nicht die Summe bekommen. Der JavaScript-Code ist möglicherweise nicht korrekt. Bitte lassen Sie mich wissen, wie es zu tun -Summe einer Gridview-Spalte in einem Textfeld in yii2

index.php -

<?php 

use yii\helpers\Html; 
use yii\grid\GridView; 

/* @var $this yii\web\View */ 
/* @var $searchModel frontend\modules\sgledger\models\SellitemsgSearch */ 
/* @var $dataProvider yii\data\ActiveDataProvider */ 

$this->title = 'Sunglass Ledger'; 
$this->params['breadcrumbs'][] = $this->title; 
?> 
<div class="sellitemsg-index"> 

    <h1>Sunglass Ledger</h1> 
    <?php // echo $this->render('_search', ['model' => $searchModel]); ?> 

    <div class= 'col-md-6'> 
     <?= GridView::widget([ 
     'id' => 'purchasetable', 
     'dataProvider' => $dataProvider2, 
     'filterModel' => $searchModel2, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 

      //'poisg_id', 
      [ 
      'attribute' => 'Date', 
      'value' => 'posg.posg_date' 
      ], 
      'posg_invno', 
      [ 
      'attribute' => 'Vendor', 
      'value' => 'posg.posg_vname' 
      ], 

      //'poisg_sgname', 
      'poisg_qty', 

      //['class' => 'yii\grid\ActionColumn'], 
     ], 
    ]); ?> 
    </div> 

    <div class= 'col-md-6'> 
    <?= GridView::widget([ 
     'id' => 'selltable', 
     'dataProvider' => $dataProvider, 
     'filterModel' => $searchModel, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 

      //'ssgi_id', 
      [ 
      'attribute' => 'Date', 
      'value' => 'sellsg.ssg_date' 
      ], 
      'ssgi_invoiceno', 
      [ 
      'attribute' => 'Customer', 
      'value' => 'sellsg.ssg_customer' 
      ], 
      //'ssgi_sgname', 
      //'ssgi_price', 

      //['class' => 'yii\grid\ActionColumn'], 
     ], 
    ]); ?> 
</div> 
</div> 
<?php 
/* start getting the textboxes */ 
$script = <<< JS 
$(document).on('ready', function(e) { 

     var purgrid = purchasetable.getElementsByTagName('poisg_qty'); 
     var total0 = 0; 


     for (var i = 0; i < purgrid.length; i++) { 

      var totp = purgrid[i].value 
      total0 = parseInt(total0) + parseInt(totp); 
     } 

     //^This number takes (n+1)th column 
     console.log('First table total value: ' + total0); 

    }) 
JS; 
$this->registerJs($script); 
/* end getting the textboxes */ 
?> 

Aktuelle Ausgangs - enter image description here

Antwort

2

sein Können Sie Showfooter für gridview

Firts können ca Sie können berechnen, der Wert mit dem DataProvider

Dann in Gridview können Sie einstellen, Showfooter => TRUE und in der Spalte müssen Sie Sie Fußzeile hinzufügen können (und schließlich footerOptions)

 echo GridView::widget([ 
     'dataProvider' => $dataProvider, 
     ...... 
     'showFooter'=>TRUE, 
     ..... 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 
      ...... 
      [ 'attribute' => 'your_attribute', 
       'label' => 'Your Lable', 
       'footer' => $yourTotal, 
       'footerOptions' => ['style' => 'text-align:right;'],   
      ],    
      ........ 

und Sie können Sie mit input

<?= Html::textInput('your_name', $yourTotal , options[]); ?> 

oder Sie Text hinzufügen kann ein einfaches div hinzufügen

<div id='my_id'> <?= $yourTotal ?> </div> 
+0

Hallo ScaiseEdge. Showfooter kann ich mit kartik gridview selbst machen. Aber ich will es eigentlich nicht. Ich möchte die Daten an eine Textbox übergeben. Weil ich drei Textfelder haben möchte. 1. Gekauft (aus einer Gridview) 2 verkauft (aus Gridview verkauft) auf der gleichen Seite und 3. Stock (Unterschied zwischen den ersten beiden Textfelder.) – Tanmay

+0

@Tanmay Hi ... dann können Sie den ersten Teil meiner Antwort für verwenden Berechnen Sie den benötigten Wert mit DataProvider .. und wenn Sie keine Fußzeile benötigen, können Sie den Wert direkt mit dem berechneten Wert und einem einzelnen Textfeld hinzufügen .. (Zugriff auf den Wert in GridTable durch Javascript wie Sie versuchen, ist nicht einfach. .. Sie können den HTML-Ergebnis-Code für eine Überprüfung prüfen) – scaisEdge

+0

Hallo ScaiseEdge .. Ich bin nicht in der Lage, es durch zu schaffen. Können Sie den gesamten Code posten? – Tanmay