测试表tbl_student
字段id,username,sex,age
action里面测试
*****************************************************************
$sql = 'select * from tbl_student';
$conn = Yii::app()->db;
$rawData = $conn->createCommand($sql)->queryAll();
/*
这里后面的array参数是可选,用来设置排序和分页情况
$dataProvider= new CArrayDataProvider($rawData, array(
'id'=>'id',
'sort'=>array(
'attributes'=>array(
'id','username','age','sex'
), ),
'pagination'=>array(
'pageSize'=>10,
),));
*/
$dataProvider= new CArrayDataProvider($rawData);
//这里是原来的active record模型
//$dataProvider=new CActiveDataProvider('Student');
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
*****************************************************************
index.php页面如下:
$this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
));
理论上就可以了,但是实际上能看到,我们要的数据看不到,问题在CListView的itemView里面
gii帮我们生成的一般是这样:echo CHtml::encode($data->getAttributeLabel('id'));
用ar模型在这里下断点的时候,就能看到$data是一个object,而我们自己采用sql来查询的话,没有object的概念,$data是array,
因此,我们只要改成echo CHtml::encode($data['id']);
类似这样把itemView修改一下就完成了自己sql查询出来的数据到yii的CListView
很可惜,CDetailView没有itemView这个属性,暂时没研究出来怎么简单点把sql出来的数据放进他们里面去,
CGridView的dataProvider只要是实现了IDataProvider就可以,因此也可以实现。
转自:http://hi.baidu.com/new/wueryqwheb
来自http://yiiblog.info/blog/2011/04/carraydataprovider-in-yii-code-demo
$rawData = array(array('id'=>'1'),array('id'=>'2'));
$dataProvider=new CArrayDataProvider($rawData, array(
'keyField'=>'id',
'pagination'=>array(
'pageSize'=>10,
),
));
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'cart-grid',
'dataProvider'=>$dataProvider,
'columns'=>array(
'id',
array(
'class'=>'CButtonColumn',
'viewButtonUrl'=>'Yii::app()->controller->createUrl("view",array("id"=>$data["id"]))',
'updateButtonUrl'=>'Yii::app()->controller->createUrl("update",array("id"=>$data["id"]))',
'deleteButtonUrl'=>'Yii::app()->controller->createUrl("delete",array("id"=>$data["id"]))',
),
),
));