1

有没有办法使用自定义“dataProvider”选项重新渲染包含 CGridView 的视图?例如我有这样的视图文件

<?php $this->widget('bootstrap.widgets.BootGridView',array(
    'id'=>'operations-grid',
    'type'=>'striped bordered',
    'dataProvider'=>$model->search(),       
    'columns'=>array(
        array('name'=>'operationType','value'=>'$data->operationType->name'),
        array(
            'name'=>'creation_date','type'=>'datetime'
        ),
        'ammount_usd:raw:Ammount',
        'comment:text:Comment',
        array(
            'name'=>'currency',
            'value'=>'$data->currency->short',
        ),
        array(
            'name'=>'client',
            'value'=>'$data->client->fio'
        ),
        array(
            'name'=>'organization',
            'value'=>'$data->organization->name'
        ),

        array(
            'class'=>'bootstrap.widgets.BootButtonColumn',
            'header'=>'Action'
        ),
    ),
)); ?>

作为提供者,我有$model->search(),但我希望例如,如果一个按钮按下此视图以通过 ajax 重新呈现不同的dataProvider. 有没有办法做到这一点?谢谢。

4

3 回答 3

3

您可以通过多种方式做到这一点。其中,您可以让控制器通过 $dataProvider 提供视图,如下所示:

$this->widget('bootstrap.widgets.BootGridView',array(
'id'=>'operations-grid',
'type'=>'striped bordered',
'dataProvider'=>$dataProvider,   

控制器可以根据到达该请求的参数实例化所需的数据提供者。然后视图只是将这个数据提供者传递给 CGridView,完全忘记了它的精确类型。

如前所述,您可以扩展 CDataProvider(与 CActiveDataProvider 扩展相同的类)以完全自定义它,只要它提供所需的 API。查看它的文档

于 2012-08-30T18:22:34.177 回答
1

数据提供者的重点是根据某些输入为您提供某个模型的适当数据。Search() 做得很好,因为您只需要使用要搜索的适当属性来实例化模型类,并且数据提供者将为您提供与该条件匹配的所有数据。

如果你想改变 dataprovider 的输出,你可以使用修改后的 search() 函数来扩展你的模型类。如果您试图将一个完全不同的模型传递给您的数据提供者,我会为它设置一个不同的视图,因为无论如何它都会有不同的列。

于 2012-08-30T15:05:39.493 回答
0

这个关于动态CGridView的 wiki应该会给你很多想法。

于 2013-05-21T21:02:10.543 回答