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 に渡すだけで、その正確な型は完全に無視されます。

既に述べたように、必要な API を提供する限り、CDataProvider (CActiveDataProvider が拡張する同じクラス) を拡張して完全にカスタマイズできます。そのドキュメントを参照してください

于 2012-08-30T18:22:34.177 に答える
1

データプロバイダーのポイントは、特定の入力に基づいて特定のモデルの適切なデータを提供することです。Search() は、検索対象の適切な属性を使用してモデル クラスをインスタンス化するだけでよく、データ プロバイダーはその条件に一致するすべてのデータを提供するため、これがうまく機能します。

それ以上にデータプロバイダーの出力を変更したい場合は、変更した search() 関数を使用してモデル クラスを拡張できます。まったく異なるモデルをデータ プロバイダーに渡そうとする場合は、別のビューを設定します。いずれにせよ別の列を持つことになるからです。

于 2012-08-30T15:05:39.493 に答える
0

動的CGridViewに関するこの wikiは、多くのアイデアを提供するはずです。

于 2013-05-21T21:02:10.543 に答える