Gridview

Buenas tardes la realidad es tengo muy poco conocimiento de yii, y en esta ocacion me he topado con el siguiente problema y el cual es que tengo un action desde el que busco tomar información y una vez obtenida la información pasar ese arreglo a la vista y mostrarla en un gridview pero aun no encuentro el orden en el que debo de guardar la información aquí dejo un ejemplo de mi código

controlador





private function REstadistico($id_evento)

	{	 $model = new Evento;

		$model->unsetAttributes();

		//$this->render('index',array('model'=>$model,));

	

		$evento =Evento::model()->findBySql('SELECT * FROM evento where id_evento=:keyword',array(':keyword'=>$id_evento));

		$connection=Yii::app()->db;

		$command = $connection->createCommand("SELECT count(id_usuario) FROM usuario WHERE evento=$id_evento");

		$num_usuarios = $command->queryScalar();

		$command = $connection->createCommand("SELECT count(id_alumno) FROM  alumno WHERE id_evento=$id_evento");

		$num_alumnos = $command->queryScalar();

		$command = $connection->createCommand("SELECT count(id_alumno) FROM  alumno WHERE id_evento=$id_evento and trasnferido = 1");

		$alumnos_trans = $command->queryScalar();	

		$cadena=$evento->grados;

		$grados=null;

		$grados=explode('|',$cadena);

		for($indice=1;$indice<count($grados);$indice++){

			$grado=$grados[$indice];

			$command = $connection->createCommand("SELECT count(id_alumno) FROM alumno  WHERE grado=$grado AND id_evento=$id_evento");

			$num_alumnos = $command->queryScalar();

			$gdos[]= $grado.'° : '.$num_alumnos."\r\n";

			}

		

		

		//$texto.="Escuelas inscritas por turno con alumnos inscritos: \r\n\r\n";

		$data=Usuario::model()->findAll('evento='.$id_evento);

		

		foreach($data as $escuela){

			$Alumnos_inscritos=Alumno::model()->findAll('id_usuario='.$escuela->id_usuario.' and id_evento='.$id_evento);

			

			if($Alumnos_inscritos!=null)

			{

				$columns1[]=$escuela->escuela;

				

				

			}

			

			}


	$columns[] = array('name'=>'Nombre','value'=>'$columns1');


 $this->render('REstadistico',array(

                        'evento'=>$id_evento,

						'numero'=>$num_usuarios,

						'numalum'=>$num_alumnos,

						'numtrans'=>$alumnos_trans,

						'gdos'=>$gdos,

						'columns'=>$columns,

						'model'=>$model

						//'dataProvider'=>$dataProvider,

            ));



vista




<?php	$dataProvider=new CActiveDataProvider('Usuario', array(

    'criteria'=>array(

        'select' => '*' ,

		'condition' => 'evento=:cicloEscolar',

		'params' => array(

			':cicloEscolar' => $model->id_evento,

		),

		

    ),

    'pagination'=>false,

));


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

			'id'=>'alumnos-grid',

			'dataProvider'=>$dataProvider,

                        'columns'=>$columns,

			)

		);




espero me puedan ayudar,

Saludos…

Hola, creo que la solucion seria que utilices cArrayDataProvider para llenar el gridview aqui esta la clase de referencia

http://www.yiiframework.com/doc/api/1.1/CArrayDataProvider

ahora si luego necesitas utilizar los filters se complica algo la situacion pero aqui hay un solucion para esto

http://www.yiiframework.com/wiki/232/using-filters-with-cgridview-and-carraydataprovider

Espero te sea de ayuda

Saludos.

Muchas Gracias por la ayuda, ya logre resolver el problema de esta forma,




$n=1;

		$claveescuela =array();

		

		foreach($data as $escuela)

		{

			$Alumnos_inscritos=Alumno::model()->findAll('id_usuario='.$escuela->id_usuario.' and id_evento='.$id_evento);

			

			if($Alumnos_inscritos!=null)

			{array_push($claveescuela,array('id'=>$n++, 'username'=>$escuela->escuela, 'email'=>$escuela->escuela0->nombre,'turno'=>$escuela->turno0->descripcion));}

			

			

		}

	$rawData=$claveescuela;		

	$arrayDataProvider=new CArrayDataProvider($rawData, array(

	'id'=>'id',

			'pagination'=>false,

			));




	if(!isset($_GET['ajax'])) $this->render('REstadistico',array('arrayDataProvider'=>$arrayDataProvider,

		

						'evento'=>$id_evento,

						'numero'=>$num_usuarios,

						 'numalum'=>$num_alumnos,

						 'numtrans'=>$alumnos_trans,

						 'gdos'=>$gdos,

						 'params'=>$params,

						 'model'=>$model,)

						//'dataprovider'=>$dataprovider,

	);

	else  $this->renderPartial('REstadistico', array('arrayDataProvider'=>$arrayDataProvider,

	

	'evento'=>$id_evento,

						'numero'=>$num_usuarios,

						 'numalum'=>$num_alumnos,

						 'numtrans'=>$alumnos_trans,

						 'gdos'=>$gdos,

						 'params'=>$params,

						 'model'=>$model,

	

	));



y en la vista




	<?php 

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

	'dataProvider' => $arrayDataProvider,

	'columns' => array(

		array(

			'name' => 'clave',

			'type' => 'raw',

			'value' => 'CHtml::encode($data["username"])'

		),

		array(

			'name' => 'escuela',

			'type' => 'raw',

			'value' => 'CHtml::encode($data["email"])',

		),

		array(

			'name' => 'turno',

			'type' => 'raw',

			'value' => 'CHtml::encode($data["turno"])',

		),

	),

));?>



por si alguien le sirve

alguien me puede ayudar, ahora tengo un problema en la vista el render del controler me muestra la información

pero además me deja lo que estaba anterior mente osea el encabezado y pie de pagina me la inserta 2 veces

alguien sabe como hacer un redirect en vez de un render como lo muestra en el controlador??


	


$this->render('REstadistico',array('arrayDataProvider'=>$arrayDataProvider,

	'arrayDataProvider1'=>$arrayDataProvider1,

					'evento'=>$id_evento,

					'numero'=>$num_usuarios,

					 'numalum'=>$num_alumnos,

						 'numtrans'=>$alumnos_trans,

						 'gdos'=>$gdos,

						 'params'=>$params,

						 'model'=>$model,)

						//'dataprovider'=>$dataprovider,

	);

Hola que tal,

sabes podrias utilizar un store procedure para llenar una tabla con los campos que necesitas, y asi crear un modelo de esa tabla, de esa manera podrias crear el grid de esa tabla y se llenaria con los datos y los filtros funcionarian.

función en el controlador para llamar un store procedure




public function actionCallsp()

	{	

	

                        //ejemplo enviandole un parametro por get por si necesitas enviarme parametros

          	        $n=$_GET['ID'];

			$query="call sp_asignacion_bomba(".$n.");";

			$connection=Yii::app()->db;

			$command=$connection->createCommand($query);

			$row=$command->execute();  

           

		$this->redirect(array('modificar','id'=>$n));

   

	}




Aqui un ejemplo de store procedure llenando una tabla con el parametro que recibe





BEGIN

DECLARE _id INT;

SET _id  = ID_ASI;


DELETE FROM control_asi WHERE ASISTENCIA = _ID;


INSERT INTO control_asi (ID,ASISTENCIA, FICHA, ASISTIO,TURNO)

			SELECT 

			NULL  as ID,

			_id 	as ASISTENCIA,

			f.ID 	as FICHA,

			1,

			24

			

			FROM fichas f

			INNER JOIN expedientes e 

			ON f.ID = e.FICHA 

			WHERE e.ESTATUS = 'Alta';




	

END




y luego el grid que se manda a crear con filtros y todo lo necesario





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

	'id'=>'control-asi-grid',

	'dataProvider'=>$model->search(),

	'filter'=>$model,

	'columns'=>array(

array(

				'name'=>'ID',

				 'htmlOptions'=>array('width'=>'30'),


		),

array(

				'name'=>'ASISTENCIA',

			 'filter' => CUtiles::listaarray('ASISTENCIA','NOMBRE'),

			 'value' => ' ($data->ASISTENCIA) ? ASISTENCIA::model()->FindByPk($data->ASISTENCIA)->NOMBRE : " "',

			 'type' => 'raw',

			),


array(

				'name'=>'FICHA',

			 'filter' => CUtiles::listaarray('FICHA','NOMBRE'),

			 'value' => ' ($data->FICHA) ?  FICHA::model()->FindByPk($data->FICHA)->NOMBRE : " "',

			 'type' => 'raw',

			),


array(

			'name'=> 'ASISTIO',

				//'type'=>'raw', 'value'=>'CHtml::checkBox("ASISTIO",$data->ASISTIO,array("value"=>$data->ASISTIO,"readonly"=>"readonly", "onclick"=>"javascript: return false;" ))'

				'filter'=>array('1'=>'Si','0'=>'No'),

            	'value'=>'($data->ASISTIO=="1")?("Si")<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/sad.gif' class='bbc_emoticon' alt=':(' />"No")',

            	),


array(

				'name'=>'TURNO',

				'filter'=>CUtiles::enumItem($model,'TURNO'),

				),


		


		

	$botones,

	),

));




esa seria una mejor manera de hacerlo creo que yo ya que usar codigo php con sql y abusar deja de ser una buena manera de trabajar, el store procedure te deja hacer select e inserts en puro SQL y asi puedes mejorar el rendimiento.

Angel Rojas

www.gdsgt.net

Muchas Gracias, Me ha servido muchísimo la información

Saludos…