2015-01-14 3 views
0

누구든지 gridview에서 편집 가능한 열을 도울 수 있습니까? Yii2를 사용하고 있습니다. 내 모델에 데이터를 저장할 수 없습니다. gridview 열에서 게시 할 수 있습니다. 내 그리드보기에서편집 가능한 열이있는 Yii2 그리드를 사용하여 모델에 데이터를 저장하는 방법

:

$gridColumns= [ 
    'patient_no', 
    'category_name', 
    'sdv_text', 
    [ 
    'class' => 'kartik\grid\EditableColumn', 
    'attribute'=>'sdv_status', 
    'pageSummary' => true, 
    'editableOptions'=> [ 
     'header' => 'profile', 
     'format' => Editable::FORMAT_BUTTON, 
     'inputType' => Editable::INPUT_DROPDOWN_LIST, 
     'data'=> $StatusList, 
    ] 
    ], 
    // 'date_sdv_performed', 
    [ 
    'class' => 'kartik\grid\EditableColumn', 
    'attribute'=>'date_sdv_performed', 
    'editableOptions' => [ 
     'header' => 'Date Sdv Performed', 
     'inputType'=>\kartik\editable\Editable::INPUT_WIDGET, 
     'format'=>\kartik\datecontrol\DateControl::FORMAT_DATE, 
     'widgetClass'=> 'kartik\datecontrol\DateControl', 
    ], 
    ], 
    [ 
    'class' => 'kartik\grid\EditableColumn', 
    'attribute'=>'comments', 
    'hAlign' => 'top', 
    'vAlign' => 'middle', 
    'width'=>'100px', 
    'headerOptions' => ['class' => 'kv-sticky-column'], 
    'contentOptions' => ['class' => 'kv-sticky-column'], 
    'pageSummary' => true, 
    ], 
]; 
GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'filterModel' => $searchModel, 
     'layout'=>"{items}\n{pager}", 
     'pjax'=>true, 
     'toolbar' => [ 
      '{export}', 
      '{toggleData}' 
     ], 
     'responsive'=>true, 
     'hover'=>true, 
     'columns' => $gridColumns 
     ]); 

내 컨트롤러 액션에서 :

public function actionMonitoring($site_name) 
    { 
    $this->layout = 'sdv-carolina-main'; 
    $Countries  = new Countries; 
    $model   = new Flagging; 
    $searchModel = new FlaggingSearch(); 
    $dataProvider = $searchModel->monitoringsearch($site_name); 
    $allocatedsites = new AllocatedSites; 
    if (Yii::$app->request->post('hasEditable')) 
    { 
     $model = $this->findModel($model['flagging_id']); 
     $out = Json::encode(['output'=>'', 'message'=>'']); 
     $post = []; 
     $posted = current($_POST['Flagging']); 
     $post['Flagging'] = $posted; 
     if ($model->load($post)) { 
     $model->save(); 
     $output = ''; 
     if (isset($posted['sdv_status'])) 
     { 
      $output = $model->sdv_status; 
     } 
     $out = Json::encode(['output'=>$output, 'message'=>'']); 
     } 
     echo $out; 
     return; 
    } 
    return $this->render('monitoring', 
     [ 
     'searchModel' => $searchModel, 
     'dataProvider' => $dataProvider, 
     'Countries' => $Countries, 
     'model'=>$model, 
     'allocatedsites' => $allocatedsites, 
     ]); 
    } 

문제는 내가 ID를 얻을 수의 때문에 나는 내 모델을 업데이트 할 수 있습니다. 특정 행을 업데이트하려면 ID가 필요합니다. 편집 가능한 열을 사용하는 동안 ID를 가져올 수있는 방법은 무엇입니까?

미리 감사드립니다.

답변

0

실제로 해결책은 쉽습니다.

Flagging[0][status] NO _csrf TlhyUm5kajAoNxgVNy0/ZCoyHApZUlNUFh0rB1gRPGoAFSIdGSAifQ== editableIndex 0 editableKey 13 hasEditable 1

editableKey가 특정 행의 ID입니다 발견 : 난 그냥 이런 식으로 뭔가있어 내 아약스 게시물에 안았다을 업데이트 할 특정 행의 ID를 필요로한다!

다음 $_id
$_id=$_POST['editableKey']; 
$model = $this->findModel($_id); 

는 특정 행의 ID입니다 게시 된 editableKey의 값입니다 지금 내 컨트롤러에서 나는 아래이 코드를 적어 둡니다. id를 사용하여 특정 모델을 얻고 해당 ID를 기반으로 데이터를 업데이트합니다.