[Solved] CGridView - Help Needed!!!

Hi All,

I am trying to use CGridView and i have run into a problem and need all you guys n gals to help me out cause i am going crazy with this.

I have a page which loads a couple of dropdowns where the users select the filter on which the data will be provided to them.

When the form is submitted i am making an ajax request to create my query using the filters selected by users.

In the function i am creating an instance of dataprovider and sending it to a view where my Cgridview widget is present and i am partialy rendering that page.

The first time it loads as i want it.

But here is the problem when i use the paging to go to the next page(next set of records) it does not use the query i sent in the data provider but gets all the data from that model.

Also, the page nos do not come with the css

I know i maybe doing something stupid but please help me out to solve this…

code for the first view the div id "Tab" is where i am rendering the second view file.




<?php

Yii::import('application.modules.calendar.models.Days');

$criteria = new CDbCriteria();

$date = date('Y-m-d');

$criteria->select = "week_number";

$criteria->condition = "`date`='{$date}'";

$dateArr = Days::model()->find($criteria);


$this->Load_js_files = array('attMon');

$repTyp = array('1'=>'By Day','2'=>'Today','3'=>'This Week','4'=>'By Term','5'=>'Entire Year','6'=>'By Days Back');

$cat = Abs_categories::model()->findAll();

$this->pageTitle = 'Attendance Monitor'.Yii::app()->params['pageTitle'];

Yii::import('application.extensions.JScript');

JScript::showhide();

?>

<div id="pgSubHeader"><div class="pgTitle"><h2>Reports: Attendance Monitor</h2></div>

<br class="clearb"/></div><br /><br />

<?php 

    echo CHtml::beginForm();

    echo CHtml::hiddenField('week_number', $dateArr->week_number);

?>

'

<fieldset class="form">

<legend>Filter <a href="javascript:;" id="shFilter" class="shlink sh-hide">   </a></legend>

<div id="Filter" align="center">

    <span>

	<span id="spn_mn"><?php echo CHtml::dropDownList('main', '',$repTyp,array('prompt'=>'--Report Type--')); echo CHtml::hiddenField('rptName');?></span>

	<span id="spn_opts"></span>

	<br class="clearb" /><br />

	<div id="filOpts" style="display: none">

	    <span id="spn_cat"><?php echo CHtml::dropDownList('category', '',CHtml::listData($cat, 'id', 'category'),array('prompt'=>'--Category--')); echo CHtml::hiddenField('catName'); ?></span>

	    <span id="spn_type"><?php echo CHtml::dropDownList('type', '',array(),array('prompt'=>'--Type--')); echo CHtml::hiddenField('typName');?></span>

	    <span id="spn_excuse"><?php echo CHtml::dropDownList('excuse', '',array(),array('prompt'=>'--Excuse--')); echo CHtml::hiddenField('excName');?></span>

	    <span id="spn_valex"><?php echo CHtml::dropDownList('valid_excuse', '',array('0'=>'Invalid','1'=>'Valid'),array('prompt'=>'--Valid Excuse--'));echo CHtml::hiddenField('valName');?></span>

	</div>

	<br class="clearb" />

	<div id="studFil" style="display: none">

	    <?php

		$this->widget('application.widgets.ComFilter.ComFilter',array(

		    'controlOpts'=>'l|pg|s|t',

		    'tpl'=>'inline',

		    'studHtmlOpts' => array('prompt'=>'--Students--'),

		));

	    ?>

	    <br class="clearb" /><br />	    

	    <?php echo CHtml::button('Go',array('id'=>'go'));?>

	</div>

    </span>

</div>

</fieldset>

<fieldset id="filTab" class="form" style="display: none;">

    <legend> <a href="javascript:;" id="shTab" class="shlink sh-hide">   </a></legend>

    <div id="Tab">	

    </div>

</fieldset>

<?php echo CHtml::endForm();?>



Code for getting the data provider and rendering the second page. The below function is called through ajax





    public function actionGetMonData(){	

	Yii::import('application.modules.calendar.models.Days');

	$acadid =$_POST['acadid'];

	$criteria = new CDbCriteria();

	$criteria->select = 'user_code';

	$criteria->condition = ComFunc::createCondition(array('level_code'=>$_POST['level'],'prog_group_code'=>$_POST['progGroup'],'sec_code'=>$_POST['section'],'valid'=>'1','acadid'=>$acadid));

	$shMod = SchoolHistory::model()->findAll($criteria);

	foreach($shMod as $n=>$mod){

	    $usrArr[] = $mod->user_code;

	}

	$usrArr = implode('\',\'',$usrArr);

	$filter = "<div id=\"txtFilter\" style=\"align: center;text-align: center\"><h4>";

	$filter .= "<span>{$_POST['rptName']}</span>";

	if($_POST['main']=='1' || $_POST['main']=='2' || $_POST['main']=='3' || $_POST['main']=='6'){

	    if(!empty ($_POST['opts']) && $_POST['main']=='1'){

		$filter .= "<span> - {$_POST['optName']}</span>";

		$criteria->select = "code,DATE_FORMAT(date, '%a')As date";

		$criteria->condition = "DATE_FORMAT(date, '%a')='{$_POST['opts']}' AND `acadid`='{$acadid}' ";

	    } else if(!empty ($_POST['opts']) && $_POST['main']=='6'){

		$filter .= "<span> - {$_POST['optName']}</span>";

		$date = date('Y-m-d');

		$otherDate = date('Y-m-d',mktime(0, 0, 0, date("n"), date("j") - $_POST['opts'], date("Y")));

		$criteria->select = "code";

		$criteria->condition = "`acadid`='{$acadid}' AND `date` BETWEEN '{$otherDate}' AND '{$date}' ";

	    } else {

		$date = date('Y-m-d');

		$criteria->select = "code";

		if($_POST['main']=='2'){

		    $criteria->condition = "`date`='{$date}' AND `acadid`='{$acadid}' ";

		} else if($_POST['main']=='3') {

		    $criteria->condition = "`week_number`='{$_POST['week_number']}' AND `acadid`='{$acadid}' ";

		}

	    }

	    $dateArr = Days::model()->findAll($criteria);

	    foreach($dateArr as $n=>$mod){

		$dayArr[] = $mod->code;

	    }

	    $dayArr = implode('\',\'',$dayArr);

	}

	$filter .= "<span> - {$_POST['acadName']}</span>";


	if(!empty($_POST['level'])){

	    $filter .= "<span> - {$_POST['levelName']}</span>";

	    $filter .= (!empty($_POST['progGroup'])) ? "<span> - {$_POST['progGroupName']}</span>": "<span> - All Program Groups</span>";

	    $filter .= (!empty($_POST['section'])) ? "<span> - {$_POST['sectionName']}</span>": "<span> - All Sections</span>";

	    $filter .= (!empty($_POST['term'])) ? "<span> - {$_POST['termName']}</span>": "<span> - All Terms</span>";

	} else {

	    $filter .= '<span> - ALL Levels</span>';

	}

	if(empty($_POST['excuse']) && !empty($_POST['category'])){

	    $filter .= "<span> - {$_POST['catName']}</span>";

	    if(empty($_POST['type'])){

		$filter .= "<span> - ALL Types</span>";

		$criteria = new CDbCriteria();

		$criteria->select = 'id';

		$criteria->condition = "`categoryid`='{$_POST['category']}' AND `active`='1'";

		$typeArr = Abs_types::model()->findAll($criteria);

		foreach($typeArr as $n=>$model){

		    $typArr[] = $model->id;

		}

		$typArr = '\''.implode('\',\'',$typArr).'\'';

		$criteria->select = 'id';

		$criteria->condition = "`typeid` IN ({$typArr}) AND `active`='1'";

	    } else {

		$filter .= "<span> - {$_POST['typName']}</span>";

		$criteria->select = 'id';

		$criteria->condition = "`typeid` = '{$_POST['type']}' AND `active`='1'";

	    }

	    $excuseArr = Abs_excuses::model()->findAll($criteria);

	    if(!empty($excuseArr)){

		foreach($excuseArr as $n=>$model){

		    $excArr[] = $model->id;

		}

		$excArr = implode('\',\'',$excArr);

	    }

	    $filter .= "<span> - All Excuses</span>";

	} else {

	    $filter .= (!empty($_POST['category'])) ? "<span> - {$_POST['catName']}</span>": "<span> - All Categories</span>" ;

	    $filter .= (!empty($_POST['type'])) ? "<span> - {$_POST['typName']}</span>": "<span> - All Types</span>" ;

	    $filter .= "<span> - {$_POST['excName']}</span>";

	}

	if(!empty($_POST['valid_excuse'])){

	    $filter .= "<span> - {$_POST['valName']}</span>";

	}

	$filter .="</h4></div>";

	$excuse = (!empty($_POST['excuse'])) ? "'{$_POST['excuse']}'": $excArr ;

	$criteria = new CDbCriteria();

	$criteria->select = "stud_code,term_code,acadid, sum(valid_excuse) absValid, count(stud_code) absTotal, (count(stud_code) - sum(valid_excuse)) absInvalid";

	$criteria->condition = ComFunc::createCondition(array('term_code'=>$_POST['term'],'acadid'=>$acadid,'excuseid'=>$excuse ,'valid_excuse'=>$_POST['valid_excuse'],'day_code'=>$dayArr,'stud_code'=>$usrArr),true);

	$criteria->group = 'stud_code';

	$criteria->order = 'absTotal desc';

	

	$dataProvider=new CActiveDataProvider('Abs_absences', array(

		'pagination'=>array(

		    'pageSize'=> '35',

		),

		'criteria'=>$criteria

	    ));

	$this->renderPartial('attMonGrid',array('dataProvider'=>$dataProvider,'filter'=>$filter));

    }



the rendered page for cgridview




<?php

$this->Load_js_files = array('attMon');

echo $filter; ?>

<?php

    echo CHtml::beginForm();

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

	'id'=>'attendence-grid',

	'dataProvider'=>$dataProvider,

	'cssFile'=>false,

	'itemsCssClass'=>'dataGrid',

	'filterCssClass'=>'center',

	'filterPosition'=>Yii::app()->params['gridFilterPosition'],

	'columns'=>array(

	    array('header'=>'','name'=>'code', 'type'=>'raw', 'value'=>'CHtml::tag(\'div\',array(\'class\'=>\'open-details\',\'id\'=>\'shDe_\'.$data->stud_code),\' \',true)', 'filter'=>false),

	    array('header'=>'Student', 'name'=>'stud_code', 'type'=>'raw', 'value'=>'CHtml::tag(\'span\', array(), Users::formatFullName($data->student),true)'),

	    array('header'=>'Level', 'type'=>'raw', 'value'=>'CHtml::tag(\'span\', array(), $data->term->level->level,true)'),

	    array('header'=>'Program Group', 'type'=>'raw', 'value'=>'CHtml::tag(\'span\', array(), $data->term->prog_group->program_group,true)'),

	    array('header'=>'Invalid','type'=>'raw', 'value'=>'CHtml::tag(\'span\', array(), $data->absInvalid,true)'),

	    array('header'=>'Valid','type'=>'raw', 'value'=>'CHtml::tag(\'span\', array(), $data->absValid,true)'),

	    array('header'=>'Total','type'=>'raw', 'value'=>'CHtml::tag(\'span\', array(), $data->absTotal,true)'),

	)

    ));

    echo CHtml::endForm();

?>



Thank you guys and gals in advance,

Regards,

Wenceslaus D’silva

BUMP

I don’t know if it will solve your problem, but try to use GET method in your form instead of POST. CGridView requires GET method to work properly.

Thanks you buddy for your reply i shall try this and get back if it works.

Thanks viter. It worked like a charm. Thanks The Post is Solved maybe it will help someone else… Cheers and God Bless

Glad to help you :)

hi Wenceslaus D’silva,

I am working in a project for employees i am new to this platform so if you can kindly provide this module(Attendance module) to me as open source to my private mail or or in extension.