0

我在另一个 cgridview 中有一个 cgridview:外部是:

$this->widget('application.modules.user.components.CsvGridView', array(
    'dataProvider'=>$model->mySearch(),
    'filter' => $model,
    'id'=>'users-grid',
...

内部是:

$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'vacr-grid',

    'dataProvider'=>$model->searchu(),
   // 'pager'=>false,
   // 'enableSorting'=>false,
    'summaryText'=>'',
    'ajaxUpdate'=>'vacr-grid',

    'columns'=>array(

        'start',
        'end',
                array(
                        'name' => 'vac_type',
                        'value' =>
                        'isset($data->vacType->name)?$data->vacType->name:$data->vac_type'
                ),
    ),
));

问题是内部没有正确更新(当然用ajax更新)。

例如,当我单击“下一步”时,在内部 cgridview 中,请求的 URL 是:请求 URL:http://localhost/orm/vac/vac/adminu/user_id/1/Vac_page/2?ajax=users-grid
注意 users-grid 是外部 cgridview 的 id。然后在我单击“下一步”后,内部和外部 cgridviews 都消失了。

我尝试使用ajaxUpdate 属性,但它不影响任何东西。谢谢你。

4

2 回答 2

3

这与我遇到的问题类似。排序和分页 url 由 dataProvider 设置,而搜索 url 由 ajaxUrl 设置。您必须设置所有 3 以脱离上下文使用 CGridView。

dataprovider 单独设置:

$dataProvider=new CActiveDataProvider('Modelname',array(
    'criteria'=>$criteria,
    'pagination'=>array(
        'route'=>'something/search'
    ),
    'sort'=>array(
        'route'=>'something/search'
    )
));




$this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'vacr-grid',    
    'dataProvider'=>$dataProvider,
    'summaryText'=>'',
    'ajaxUpdate'=>'vacr-grid', // not necessary if same as id
    'ajaxUrl'=>Yii::app()->createUrl( 'Something/search' ),  // this takes care of the search  
    'columns'=>array(    
        'start',
        'end',
                array(
                        'name' => 'vac_type',
                        'value' =>
                        'isset($data->vacType->name)?$data->vacType->name:$data->vac_type'
                ),
    ),
));

还有我类似的问题...

Yii中如何使用CGridView的ajaxUrl参数?

于 2012-10-01T18:32:44.870 回答
0

嵌套它们时 CGridView 的两个非常重要的配置选项是updateSelectorfilterSelector!默认情况下,这些选择器以 GridView 中所有可用的分页/排序链接为目标。因此,单击嵌套 gridview 中的排序链接也会导致所有父 GridView 更新。因此,如果这是一个问题(可能是),您将不得不调整这些选择器以仅选择 gridview 的直接后代而不是子 gridview 的那些。如果子 gridview 有另一个 ID,反之亦然。

所以你是这样的父 GridView(主要需要)选择器(注意使用“大于”符号):

$this->widget('CGridView',array(
    ...
    'updateSelector' => '#PARENTGRIDVIEW > .items.table > thead tr th a.sort-link, #PARENTGRIDVIEW > .pagination a',
    'filterSelector' => '#PARENTGRIDVIEW .filters input, #PatientSaleMedicalsIndex .filters select',

现在子 gridview 可以独立于父级更新。注意:孩子的 gridview id 必须重新出现在 ajax 请求中,否则它的内容将不会放置在触发请求的页面/gridview 中!

于 2019-07-10T14:07:38.417 回答