Tolonngin ane gan menggunakan CButtonColumn

para agan2… ane ada masalah ni sama yii.

[b]Trying to get property of non-object

C:\xampp\htdocs\yiiv1.1.8\framework\base\CComponent.php(619) : eval()'d code(1)[/b]

kata dia begitu…

error itu muncul pas ane tambahin code


array(

	'class'=>'CButtonColumn',

	),	

tolongin gan gimana caranya nampilin CButtonColumn.

ni code di view-nya




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

	'id'=>'keyword-grid',

	'dataProvider'=>$dataProvider,     

	'columns'=>array(

		//'action',

		array(	'name'=>'Operator',

				'value'=>'$data["operator"]'

			),

		array(	'name'=>'Msisdn',

				'value'=>'$data["msisdn"]'

			),

		array(	'name'=>'Content',

				'value'=>'$data["content"]'

			),

		array(	'name'=>'Tanggal',

				'value'=>'$data["date_in"]'

			),

		array(	'name'=>'ShortCode',

				'value'=>'$data["shortcode"]'

			),

		array(

				'class'=>'CButtonColumn',

			),	

	),

)); ?>



trus ni code di controllernya




$data=new Mo;

		$data->unsetAttributes();

		if(isset($_GET['Mo'])){

			$data->attributes=$_GET['Mo'];

			$msisdn = $_GET['Mo']['msisdn'];

			$opr = $_GET['Mo']['operator'];

			$count=Yii::app()->db->createCommand("select count(*) from Mo where msisdn = $msisdn and operator = $opr")->queryScalar(); 

			$sql="select * from Mo where msisdn = $msisdn and operator = $opr"; 

			$dataProvider=new CSqlDataProvider($sql,array(

                                           'keyField' => 'id_mo',

                                           'totalItemCount' => $count,

                                           'pagination' => array('pageSize'=>10,),));

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

						  'dataProvider'=>$dataProvider,

			));

		}



menurut ane script agan dah bener. coba bandingkan dengan scriptnya yg sy ambil dari dokumentasi Yii:




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

    'dataProvider'=>$dataProvider,

    'columns'=>array(

        'title',          // display the 'title' attribute

        'category.name',  // display the 'name' attribute of the 'category' relation

        'content:html',   // display the 'content' attribute as purified HTML

        array(            // display 'create_time' using an expression

            'name'=>'create_time',

            'value'=>'date("M j, Y", $data->create_time)',

        ),

        array(            // display 'author.username' using an expression

            'name'=>'authorName',

            'value'=>'$data->author->username',

        ),

        array(            // display a column with "view", "update" and "delete" buttons

            'class'=>'CButtonColumn',

        ),

    ),

));



Mungkin kesalahannya bukan pada gridview, tp pada dataProvidernya ;D

ane dah coba-coba bandingin gan. ane kan pake CSqlDataProvider emang ga bisa, tapi kalo pake CActiveDataProvider baru bisa,.

gimana caranya ya gan biar CButtonColumn itu muncul walaupun ane pake CSqlDataProvider??

setau ane emang ga bisa pake CsqlDataProvider (tapi ga tahu apa ane ny yg ga tau)…

biasanya ane buat tombol/link sendiri d gridview buat ngatasinnya…

Kalo ane…

Buat dulu pake CDbCriteria , Kemudian $criteria yang digunakan masukan ke dataprovider gan…!

Baca di dokumentasinya…

CGridView should be used together with a data provider, preferrably a CActiveDataProvider.

Dari Pengalaman2 saya yang sudah2 Penggunaan CGridView tidak dengan CActiveDataProvider memang banyak menimbulkan masalah terutama CButton dan Filter… so usahakan untuk pake CActiveDataProvider bukannya CSqlDataProvider

Saya belum coba, tapi kalo kira2x begini, bisa tidak?




array(

  'class'=>'CButtonColumn',

  'template'=>'{edit}&nbsp;{hapus}',

  'buttons'=>array(

    'edit'=>array(),

    'hapus'=>array(),

  ),

),



Intinya si jangan pake template bawaannya. Sekali lagi saya belum mencoba, hanya kira2x