Как предоставить cgridview выбранные строки для отображения и в то же время обеспечить поиск столбцов

Здесь я использую CActiveDataProvider для передачи выбранных строк, задавая условие, и в представлении, которое я показываю в CGridView, столбцы работают нормально, но в то же время я должен обеспечить поиск столбцов. Я не могу обеспечить поиск, может ли кто-нибудь помочь . вот мой пример кода

код контроллера

public function actionShow($id) 
{
    $model=new StudentResult('search');

    $model->unsetAttributes();  // clear any default values
    if(isset($_GET['StudentResult']))
        $model->attributes=$_GET['StudentResult'];

    $dataProvider=new CActiveDataProvider('StudentResult', array(
        'criteria'=>array(
            'condition'=>"profileId=$id",
            ),
        'pagination'=>array(
            'pageSize'=>20,
        ),
    ));

    $this->render('show',array(
        'model'=>$model,
        'dataProvider' => $dataProvider,
    ));

}

посмотреть код

<div class="search-form" style="display:none">
<?php $this->renderPartial('_search',array(
'model'=>$model,
 )); ?>
 </div><!-- search-form -->

<?php
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'student-result-grid',
'dataProvider'=>$dataProvider,
'filter'=>$model,
'columns'=>array(
    'id',
    'moduleCode',
    'moduleTitle',
    'moduleCredits',
    'grade',
    'creditsObtain',
    'semester',
    /*
    'points',
    'profileId',

    'createdOn',
    'lastModifiedOn',
    'lastModifiedBy',
    */
    array(
        'class'=>'CButtonColumn',
    ),
),
)); ?>

поэтому я показываю данные, указав 'dataProvider' => $dataProvider, поэтому значения отображаются правильно, но поиск не работает, если я предоставлю 'dataProvider' => $model->search(); все значения отображаются и поиск работает


person subhash    schedule 19.02.2013    source источник
comment
Уточните немного о выбранных строках. Пользователь должен выбрать строку или вы решили показать конкретную строку?   -  person tnchalise    schedule 19.02.2013
comment
администратор нажмет на ссылку идентификатора, чтобы идентификатор был собран в методе показа, и с помощью этого идентификатора он отобразит определенные строки.   -  person subhash    schedule 19.02.2013


Ответы (1)


Здесь вы можете передать выбранную строку нужному действию.

   <?php $this->widget('zii.widgets.grid.CGridView', array('id' =>'list-grid',
        'dataProvider'=>$dataProvider->search(),
        'filter' =>$dataProvider, 
        'columns'=>array(
        'id',
        'moduleCode',
        'moduleTitle',
        'moduleCredits',
        'grade',
        'creditsObtain',
        'semester',
         'action'=>array(
            'class'=>'CButtonColumn',
            'header' => 'Edit',
            'template' => '{Edit}',
            'buttons' => array(
                'Edit' =>array(
                'label' => 'Edit',
            'imageUrl'=>Yii::app()>request>baseUrl.'path/to/your/image',// you can use other options
                 'url' => 'Yii::app()->createUrl("/controller/action/id/".someencryption-to-hide-id($data->id))',),             
'visible' => TRUE,      ),
           ),
        ), )); ?>

Ваше действие контроллера выглядит следующим образом:

public function actionYourAction() {
        $dataProvider = new ModelName('search');
        $dataProvider -> unsetAttributes();
        // clear any default values
        if (isset($_GET['ModelName'])) {
            $dataProvider -> attributes = $_GET['ModelName'];
        }
        $this -> render('viewPage', array('dataProvider' => $dataProvider, ));

    }

И критерии модели будут:

 public function search()
    {
        $criteria -> compare('id', $this -> id);
        ...
        return new CActiveDataProvider($this, array('criteria' => $criteria, ));
    }

Дайте мне знать, правильно ли я понимаю вас.

person tnchalise    schedule 19.02.2013