2015-01-13 4 views
0

저는 Yii2를 처음 사용합니다. 2 열이 자동으로 생성 된 gridview가 있습니다 (모델 클래스가 아님). 모든 행에는 클릭하면 현재 행 셀 값에 액세스하고 계산을 수행하는 버튼이 있습니다.Yii2 Gridview 현재 행 값

$data은 현재 모델 행만을 나타 내기 때문에 사용할 수 없습니다. 아래에있는 내 코드입니다 :

<?php 

echo GridView::widget([ 
    'dataProvider' => $model->getInsuredCompanyVehiclesArrayDataProvider(), 
    'filterModel' => $model->getInsuredCompanyVehiclesArrayDataProvider(), 
    'columns' => [           
     [ 
      'label' => 'Amount', 
      'format' => 'raw', 
      'value' => function ($data) { 
       return $data->rate * Yii::$app->session->get('motorInsuranceEntry')->sumInsured/100; 
      }, 
     ],      
     [ 
      'label'=>'Total', 
      'format' => 'raw', 
      'value' => function ($model, $key, $index, $column) { 
       //return $data->rate * Yii::$app->session->get('motorInsuranceEntry')->sumInsured/100 + $model->amount; 

       return '' . $column ;      
      }, 
     ],             
    ], 
]); ?> 

amountTotal 콜 럼 값은 동적으로 계산하지만 난 당신이 이미 열 동적이다 인해 알고 있겠지만 다른 세포 :(

+0

이 열이 얼마나 정확하게 생성되는지 보여줍니다. – arogachev

+0

양식에 숫자 값을 입력하는 세션에 사용자 양식을 저장합니다. 이 값은 금액이되고 다른 일부 매개 변수를 추가하면 총 가치가됩니다. 이것들은 숫자 값 뿐이며 그리드 사용자 정의 열에 이러한 값을 표시 할 수 있지만 마지막 그리드 셀에서는이 값에 액세스 할 수 없습니다. 이 값은 그리드 행마다 바뀝니다. 응답에 대한 –

답변

0

에서이 값에 액세스 할 수 없습니다 생각된다

동적 클래스를 계산하기 위해 모델 클래스의 동적 열 (총계 및 총계)에 대한 함수를 만들고 행에서 새로 고침 버튼을 클릭 한 후 파약.

은 또한에 의해

metioned here 같이있는 gridview에 추가 데이터를 추가하거나 당신의 gridview 모델을 확장 또는 인라인 함수를 (REQ를 사용할 수 있습니다. PHP 5.3 이상). 그러나 각 열에 의해 완전히 동적 인 경우 각 열 값을 다시 계산해야합니다.

는하지만 난 당신의 단순한 실수 한 번

'value' => function ($data) { 

다른 시간

'value' => function ($model, $key, $index, $column) { 

두 함수가 올바른지를 사용하는 것 같다. 한 번 모델을 매개 변수 "name"$ data와 "name"$ model로 함수에 전달합니다. 함수 내부에는 함수에 전달 된 매개 변수에만 액세스 할 수 있습니다.

두 번째 인라인 함수 코드는 $ data 대신 $ model을 사용해야합니다 (첫 번째 매개 변수 이름은 모델 임).

return $model->rate * Yii::$app->session->get('motorInsuranceEntry')->sumInsured/100 + $model->amount; 

하지만 난

public function getAmount() { 
    return $this->rate * Yii::$app->session->get('motorInsuranceEntry')->sumInsured/100; 
} 

당신의 총 그냥 금액 * 2 것을 내가 뭘 이해하지 못하는 당신의 모델 클래스의 함수를 만드는 것입니다 언급 한 바와 같이? 하지만 이건 단지 테스트 코드 일 뿐이에요.

+0

덕분에, 나는 클라이언트 측 내가 jQuery를 사용하여 않았다 솔루션을 원 : $ ('# gridID 테이블 TBODY의 TR')를 { \t 이가 $ (이) = $ (() 함수를 클릭하고 VAR을. firstColVal = $ this.find ('td : first-child'). 텍스트(); var rate = $ this.find ('td : nth-child (2)') text(). 부분 문자열 (0, $ text(). 길이 - 1); var amount = parseInt ($ this.find ('td : nth-child (8)') this.find ('td : nth-child (2)')본문()); var total = parseInt ($ this.find ('td : nth-child (9)') .Val()); var cd = $ this.find ('td : nth-child (3)') .html(); var year = $ this.find ('td : nth-child (7)') .html(); } –