1

CCheckBoxColumn をフォームの vgridview に追加すると、チェック ボックスのデータを操作するための正確なインデックスがないためです。そのため、「uncheckValue」を追加しようとしましたが、テーブルの参照値にリンクできません。現在の行のこの値にアクセスする方法はありますか? (私のコードの $data->reference は Undefined 変数を返します)。

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'gview',
'dataProvider'=>$dataProvider,
'columns'=>array(
    'client',
    'reference',
    array(
        'class'=>'CCheckBoxColumn',
        'id'=>'CB',
        'selectableRows'=>2,
        'checkBoxHtmlOptions'=>array(
            'uncheckValue'=>$data->reference, ),

    )),));

誰でも私を途中に置くことができます(もしあれば...)

4

1 に答える 1

1

最終的に、CCheckBoxColumn を拡張する方法を見つけました。このコード内では、$data にアクセスできます。これで、テーブルの「参照」列として彼の「名前」を含むフォームの戻りチェックボックスができたので、さらにバッチ処理を行うことができます。uncheckValue 隠しフィールドは、チェックされていないフィールド (!) のインデックスのみを提供するため、適切ではありませんでした。

このコードは表示されたままではなく、拡張されるべきだと思います...コメントはまだ歓迎します....

Yii::import('zii.widgets.grid.CCheckBoxColumn');
class LIndexCheckBoxColumn extends CCheckBoxColumn {

public $linkId; 

public function renderDataCellContent($row,$data)
    {
    if($this->value!==null)
        $value=$this->evaluateExpression($this->value,array('data'=>$data,'row'=>$row));
    else if($this->name!==null)
        $value=CHtml::value($data,$this->name);
    else
        $value=$this->grid->dataProvider->keys[$row];

    $checked = false;
    if($this->checked!==null)
        $checked=$this->evaluateExpression($this->checked,array('data'=>$data,'row'=>$row));

    $options=$this->checkBoxHtmlOptions;
    //$name=$options['name'];
    $varLink=$this->linkId;
    $name=$data->$varLink;
    unset($options['name']);
    $options['value']=$value;
    $options['id']=$this->id.'_'.$row;
    echo CHtml::checkBox($name,$checked,$options);
}

    }

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    'columns'=>array(
        'client',
        'reference',
        array(
            'class'=>'LIndexCheckBoxColumn',
            'id'=>'cb',
            'selectableRows'=>2,
            'linkId'=>'reference',
    )),));
于 2012-05-01T09:07:54.403 に答える