Yii gridview CHTML::dropdown 因为值不起作用

Yii gridview CHTML::dropdown as value doesn't work

我正在尝试在 gridview 中实现下拉列表,但它不起作用。

这是我的代码

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'user-grid',
'dataProvider'=>$model->roadies_search(),
'filter' =>$model,
'columns'=>array(

    array(
        'name'=>'hname_search',
        'header'=>'Hospital Name',
        'value'=>'($data->AssociatedHospitals) ? $data->AssociatedHospitals : ""',
    ),
    array(
        'type'=>'raw',
        'header'=>'Users',
        'id' => 'test',
        'value'=>function(){
                $res=Yii::app()->db->createCommand("SELECT name,id FROM med_user WHERE rank>3")->queryAll();
                $html = '<select name="user" style="width:100%;">
                <option selected>Select User</option>
                ';
                foreach ($res as $key) {
                    $html.='<option value="'.$key['id'].'">'.$key['name'].'</option>
                    ';
                }
                $html.='</select>';
                return $html;
            },
        ),
)

));

我也尝试过使用以下功能:

public function getUsername(){
    $res=Yii::app()->db->createCommand("SELECT name,id FROM med_user WHERE rank>3")->queryAll();
    return CHtml::dropDownList('usersselectlist'.$this->id,'user_id',CHtml::listData($res, 'id', 'name'));
}

我想将所有用户显示为网格视图中每一行的下拉列表。

编辑

我发现下拉菜单在 Firefox 上工作正常,但问题出在 chrome。它没有显示选定的值。

这是一个例子

Chrome: http://i.imgur.com/eAvBRwO.png

火狐浏览器:http://i.imgur.com/7wBc1GX.png

这种方式真的很糟糕。您将为每一行执行 SQL 查询,为什么不在网格之外使用它?

    $res=Yii::app()->db->createCommand("SELECT name,id FROM med_user WHERE rank>3")->queryAll();
    $select_data = CHtml::listData($res, 'id', 'name');

    ......

        array(
                'type'=>'raw',
                'header'=>'Users',
                'id' => 'test',
                'value'=>function($data) use ($select_data){
                        return CHtml::dropDownList('usersselectlist'.$data->id','',$select_data);
                    },
                ),
    .......

像这样的东西应该有用。

$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'user-grid',
'dataProvider'=>$model->roadies_search(),
'filter' =>$model,
'columns'=>array(

    array(
        'name'=>'hname_search',
        'header'=>'Hospital Name',
        'value'=>'($data->AssociatedHospitals) ? $data->AssociatedHospitals : ""',
    ),
    array(
        'type'=>'raw',
        'header'=>'Users',
        'id' => 'test',
        'value'=>function(){
                // but better prepare data in model and set here from controller
                $dataReader = Yii::app()
                    ->db
                    ->createCommand("SELECT name,id FROM med_user WHERE rank>3")
                    ->query();
                $dropList = array();
                foreach ($dataReader as $row) {
                    $id = $row['id'];
                    $dropList[$id] = $row['name'];
                }
                return CHtml::dropDownList('my', null/* or selected id */, $dropList);
            },
        ),
)

));