2017-03-13 61 views
0

我在yii2網格中添加了一個複選框列,並創建了一個可以刪除所有選定值的按鈕。然而在我的行動中,我使得刪除圖標只顯示依賴如下。yii2 kartik grid CheckboxColumn

「刪除」 =>函數($模式,$鍵,$指數){

/* add public function in model i,e GetstopDelete*/ 

if(empty($model->stopDelete)) 
return true; 
else 
return $model->stopDelete == 1 ? false : true; 
} 


}, 

,但如何我隱藏複選框的基礎上,因爲我不希望同樣的參數細胞如果您不能刪除該行,可以使用複選框嗎?

我使用 http://demos.krajee.com/grid#checkbox-columnhttp://www.yiiframework.com/doc-2.0/yii-grid-checkboxcolumn.html

+0

您希望禁用複選框,如果能正常工作不會被刪除? –

回答

2

你可以執行技巧,如使用正常的列和繪圖的複選框+事件自己。 它看起來像:

[ 
    'header'=>Html::checkbox('selection_all', false, ['class'=>'select-on-check-all', 'value'=>1, 'onclick'=>'$(".kv-row-checkbox").prop("checked", $(this).is(":checked"));']), 
    'contentOptions'=>['class'=>'kv-row-select'], 
    'content'=>function($model, $key){ 
     return Html::checkbox('selection[]', false, ['class'=>'kv-row-checkbox', 'value'=>$key, 'onclick'=>'$(this).closest("tr").toggleClass("danger");', 'disabled'=> isset($model->stopDelete)&&!($model->stopDelete===1)]); 
    }, 
    'hAlign'=>'center', 
    'vAlign'=>'middle', 
    'hiddenFromExport'=>true, 
    'mergeHeader'=>true, 

],

這種方式你對這些行爲進行更多的控制。

+0

工作。謝謝。我只是完成了對代碼的一些修改,包括完成的javascript函數。完成後我會在下面發帖。謝謝。 –

1

我的工作代碼基於Tai Kitron的答案。

添加以下電網山坳

'header'=>Html::checkbox('selection_all', false, ['class'=>'select-on-check-all', 'value'=>1, 
      'onclick'=>' 
         $(".kv-row-checkbox").prop("checked", $(this).is(":checked")); 
         if($(".kv-row-checkbox").prop("checked") === true) $(".delete_ready").attr("class","delete_ready warning"); 
         if($(".kv-row-checkbox").prop("checked") === false) $(".delete_ready").attr("class","delete_ready"); 


         ']), 
     'contentOptions'=>['class'=>'kv-row-select'], 
     'content'=>function($model, $key){ 

      if(isset($model->stopDelete)&&($model->stopDelete!==1)) 
      return Html::checkbox('id[]', false, ['class'=>'kv-row-checkbox ', 
        'value'=>$key, 'onclick'=>'$(this).closest("tr").toggleClass("warning");', 'disabled'=> isset($model->stopDelete)&&($model->stopDelete===1)]); 
      else 
       return ''; 
      //return Html::checkbox('selection[]', false, ['class'=>'kv-row-checkbox', 'value'=>$key, 'onclick'=>'$(this).closest("tr").toggleClass("danger");', 'disabled'=> isset($model->stopDelete)&&!($model->stopDelete===1)]); 
     }, 
     'hAlign'=>'center', 
     'vAlign'=>'middle', 
     'hiddenFromExport'=>true, 
     'mergeHeader'=>true, 
     'width'=>'50px' 
    ], 

添加以下行選項

'row_options'=>function($model){ 
      if(empty($model->stopDelete)){ 
       return ['class' => 'delete_ready']; 
      } 

使用下面的JavaScript //刪除選定的行 的$(document)。在( '點擊', '#deleteSelected',功能(){

 var table = $('#deleteSelected').attr('value'); 
     var keys = new Array();//[];//$('.deletSelectedItem:checked').val(); 
     var path = 'global/deleteselected'; 
     var current_page = location.pathname.substring(1);//window.location; 

     var c = 0; 
     $("input[name='id[]']:checked").each(function() { 

       keys[c] = $(this).val(); 
       c++; 
     }); 

     if(current_page.indexOf("index") >= 0){ 
      path = '../global/deleteselected'; 
     } 


     if(keys.length ==0){ 

      krajeeDialog.alert("No Recorlds Selected") 

     } 
     else { 

      if(keys.length ==1) 
       var s = ''; 
      else 
       var s ='s'; 

      krajeeDialog.confirm("Are you sure you want to delete the selected "+keys.length+" recorld"+s+"?", function (result) { 

       if (result) { 

        $.post({ 
         url: path, 
         data: {keylist: keys, table:table}, 
         success: function (data) { 

          if(current_page.indexOf("index") >= 0) 
           $.pjax.reload({container: "#"+table}); 
          else 
           $.pjax.reload({container: "#"+table, url: table}); 


         }, error: function (xhr, status, error) { 
          alert(status + error);// check status && error 
         }, 
        }); 

       } 
      }); 
     } 


}); 

工作正常。感謝您的幫助大基倫

0

這似乎是一個年紀大一點的問題,但是這是我的方法:

[ 
    'class' => '\kartik\grid\CheckboxColumn', 
    'checkboxOptions' => function($model) { 
     if(!$model->status){ 
      return ['disabled' => true]; 
     }else{ 
      return []; 
     } 
    }, 
], 

這甚至會使用默認警予CheckboxColumn