【问题标题】:Yii gridview CHTML::dropdown as value doesn't workYii gridview CHTML::dropdown 作为值不起作用
【发布时间】:2015-05-28 07:40:55
【问题描述】:

我正在尝试在 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'));
}

我想将所有用户显示为一个下拉列表,用于 gridview 中的每一行。

编辑

我发现下拉菜单适用于 firefox,但问题出在 chrome 上。它没有显示选定的值。

这是一个例子

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

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

【问题讨论】:

    标签: php gridview yii


    【解决方案1】:
    $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);
                },
            ),
    )
    
    ));
    

    【讨论】:

    • 嘿,感谢您的帮助,但 chrome 仍然没有显示任何选定的选项。你能确认这对你有用吗?
    • 例如选中的 id = 1 的项目。 return CHtml::dropDownList('my', 1, $dropList);
    • 请查看我提供的屏幕截图,问题是谷歌浏览器在手动从下拉列表中选择选项时没有在选择框中显示任何值。
    • 检查 Chrome 和 FF 中的 DOM 元素。检查样式、js、控制台。我认为前端有问题。因为在我的项目 dropDown 在 chrome 中工作正常。 prntscr.com/7ap5n8
    • 你在使用引导程序吗?
    【解决方案2】:

    这真的很糟糕。你会为每一行做 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);
                        },
                    ),
        .......
    

    这样的事情应该可以工作。

    【讨论】:

    • 感谢您的帮助。现在我面临的唯一问题是它不适用于 chrome。你能帮我解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    相关资源
    最近更新 更多