【问题标题】:Yii gridview How to set editable option based on the dataYii gridview 如何根据数据设置可编辑选项
【发布时间】:2016-09-19 05:24:27
【问题描述】:

这是我的网格视图代码

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'toolbar'=> [
        ['content'=>
            Html::a('<i class="glyphicon glyphicon-plus"></i> Add New', ['create'],['class'=>'btn btn-shadow btn-success'])
        ],
        '{toggleData}',
    ],
    'columns' => [
        ['class' => 'kartik\grid\SerialColumn'],
        [
            'attribute'=>'Name',
            'vAlign'=>GridView::ALIGN_MIDDLE,
        ],
        [
            'attribute'=>'Age',
            'vAlign'=>GridView::ALIGN_MIDDLE,
            'value'=>'Age',
            'width'=>'5%',
            'hAlign'=>'center',
        ],
        [
            'attribute'=>'Address',
            'vAlign'=>GridView::ALIGN_MIDDLE,
        ],
        [
            'class' => 'kartik\grid\EditableColumn',
            'attribute'=>'Status',
            'vAlign'=>GridView::ALIGN_MIDDLE,
            'hAlign'=>GridView::ALIGN_CENTER,
            'width'=>'15%',
            'filterType'=>GridView::FILTER_SELECT2,
            'filterWidgetOptions'=>[
                'options' => ['placeholder' => 'Search Status...'],
                'pluginOptions' => [
                    'allowClear' => true
                ],
            ],
            'value'=>function($model){
                return ($model->Status=='0'?'Pending':($model->Status=='1'?'Accepted':'Rejected'));},
            'filter'=>['Pending','Diterima'],
            'label' => 'Status',
            'refreshGrid'=>true,
            'editableOptions'=>[
                'format' => Editable::FORMAT_BUTTON,
                'asPopover' => true,
                'inputType' => Editable::INPUT_DROPDOWN_LIST,
                'data'=>['0'=>'Pending', '1'=>'Accepted', '2'=>'Rejected'],
                'options' => ['class'=>'form-control'],
            ]
        ],
        [
            'class' => 'kartik\grid\ActionColumn',
            'template' => '
                <li>{view}</li>
                <li>{update}</li>
                <li>{delete}</li>',
            'dropdown'=>true,
            'dropdownOptions'=>['class'=>'pull-right'],
            'headerOptions'=>['class'=>'kartik-sheet-style'],
        ],
    ],
    'panel'=>[
        'type'=>GridView::TYPE_DEFAULT,
    ]
]); ?>

帮助我了解状态属性。这个 gridview 的结果是这样的:

我想要的是这样的:

所以,就像当 Status 为 Pending 时,editableOption 处于打开状态。但当 Status 为 Accepted 或 Rejected 时,editableOption 处于禁用状态。这可能吗?

【问题讨论】:

  • 'data'=&gt;['0'=&gt;'Pending'],
  • 好吧,这就像创建一个 if 语句来打开和关闭 editableOption。 “数据”只是为了改变状态。 @Anant

标签: php gridview yii yii2


【解决方案1】:

您需要更改状态属性值选项

更改状态属性的值选项。

[
        'class' => 'kartik\grid\EditableColumn',
        'attribute'=>'Status',
          // ------- your code ------------
        'format'=>'raw',
        'value'=>function($model){
              if($model->Status=='0')
              {
                // if status =0 than create button and append with string
                $btn='<button type="button" id='.$model->id.' class="btn btn-default ><i class="fa fa-pencil-square-o"></i></button>';
                return 'Pending'.$btn;
              }
              else
              {
                return($model->Status=='1'?'Accepted':'Rejected');
              }
            },
        // ------- your code ------------

    ],

【讨论】:

  • ” @Yasin Patel
【解决方案2】:

有多种方法可以按照您的要求进行操作,如果您使用过editableOptions,那么

  1. 对于 Editable::INPUT_DROPDOWN_LIST 类型 -> 使用 'editableButtonOptions' => [ 'disabled' => $data->your_status_variable_condition],

  2. 对于任何其他类型添加只读属性

    'readonly' => 函数($data){ 返回 $data->your_status_variable_condition; },

我希望它可以帮助正在寻找相同问题的人

【讨论】:

    猜你喜欢
    • 2011-11-24
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多