CActiveDataProvider, CArrayDataProvider, CSqlDataProvider填充CGridView数据经验谈
来源:互联网 发布:网络重口现场微博 编辑:程序博客网 时间:2024/06/05 00:20
转自:http://yxmhero1989.blog.163.com/blog/static/112157956201301074352103/
这开始介绍Zii组件之前,先简要介绍一下Yii支持的数据源接口 IDataProvider,IDataProvider主要功能是为UI组件如GridView,ListView等提供数据源,同时也支持数据的分页和排序。下图为Yii内置的三种数据源:
- CActiveDataProvider 基于Active Record的数据源
- CArraryDataProvider 基于数组的数据源
- CSqlDataProvider 基于SQL查询的数据源
1.CActiveDataProvider 基于ActiveRecord, 它通过AR的 CActiveRecord::findAll方法读取数据库记录,并通过 criteria属性设置查询条件。
public function actionIndex() { $dataProvider=new CActiveDataProvider('ApiUser', array( 'criteria'=>array( 'sort'=>array( 'defaultOrder'=>'createTime DESC', ), 'condition'=>'isDelete=1',//正常用户 'pagination' => array ( 'pageSize' => 20 ) ) )); $this->render('index',array( 'dataProvider'=>$dataProvider, )); }
2.CArrayDataProvider 基于数组,其中属性rawData设置原始数据,一般为数组或者DAO查询结果
//Array数据提供 $sql = "select * from tbl_user, tbl_userinfo where tbl_user.uid=tbl_userinfo.uid"; $array_data = Yii::app()->db->createCommand($sql)->queryAll(); $array_provider = new CArrayDataProvider($array_data, array( 'keyField'=>'uid', //必须指定一个作为主键 ));
我比较偷懒 按道理 $dataProvider直接在Controller里面 我只是做个例子 看的更清楚
<h1>客户端意见反馈:</h1><?php$shopsql = "SELECT * FROM {{mobile_feedback}} ORDER BY addTime DESC";$shopcount = "SELECT COUNT(*) FROM {{mobile_feedback}} ";$shopreturn = Yii::app()->apidb->createCommand($shopcount)->queryAll();$scount = isset($shopreturn[0]['COUNT(*)'])?$shopreturn[0]['COUNT(*)']:0;$dataProvider = new CSqlDataProvider ( $shopsql, array ( 'keyField'=>'id', //sql in select table column default id 'totalItemCount'=>$scount, 'db'=>Yii::app()->apidb,//default Yii::app()->db. 'id'=>'id', 'sort' => array ( 'attributes' => array ( 'id' ), // sql table columns 'defaultOrder' => array ( 'id' => true ) ), 'pagination' => array ( 'pageSize' => 20 )) );$this->widget ( 'GridView', array ( 'dataProvider' => $dataProvider, 'filter'=>$dataProvider, 'columns' => array ( array ( 'header' => '用户id', 'value' => '$data["userId"]' ), array ( 'header' => '手机号码', 'value' => '$data["phone"]' ), array ( 'header' => '意见内容', 'value' => '$data["message"]' ), array ( 'header' => '添加时间', 'value' => 'date("Y-m-d",$data["addTime"])', ), array ( 'header' => '平台', 'value' => '$data["platform"]', ), array ( 'header' => '版本', 'value' => '$data["version"]', ), array( 'header' => '<span>操作</span>', 'class'=>'CButtonColumn', 'htmlOptions'=>array( 'width'=>'100', ), 'template'=>'{view}', 'buttons'=>array( 'view' => array( 'label' =>'打开', 'url' =>'Yii::app()->createUrl("activity/signup/admin",array("id"=>$data["Id"]))', ), ) ), ), ) ); ?>
insun提醒大家 使用CSqlDataProvider的时候注意的几点:
①. $data返回的是数组 不要用$data->attributes对象的方式 否则会报错
②.右上角数目不对的话 原因是你的 $shopcount sql取的不对 仔细检查就可以了
③.用到CButtonColumn的时候记得url重写
要么 array(
'header' => '<span>操作</span>',
'class'=>'CButtonColumn',
'htmlOptions'=>array(
'width'=>'100',
),
'template'=>'{update}',
'updateButtonUrl'=>'Yii::app()->createUrl("insun/xxoo")'
),
要么 array(
'header' => '<span>操作</span>',
'class'=>'CButtonColumn',
'htmlOptions'=>array(
'width'=>'100',
),
'template'=>'{view}',
'buttons'=>array(
'view' => array(
'label' =>'打开',
'url' =>'Yii::app()->createUrl("insun/xxoo",array("id"=>$data["Id"]))',
),
)
),
④。$dataProvider = new CSqlDataProvider ( $shopsql, array (
'keyField'=>'id', //sql in select table column default id
'totalItemCount'=>$scount,
'db'=>Yii::app()->apidb,//default Yii::app()->db.
'id'=>'id',
'sort' => array (
'attributes' => array (
'id'
), // sql table columns
'defaultOrder' => array (
'id' => true
)
),
'pagination' => array (
'pageSize' => 20
)
) );
⑤。个人认为CSqlDataProvider不能用filter,因为filter是CModel的。http://www.yiichina.com/forum/thread-1904-1-1.html
Reference:
http://blog.yiibook.com/?p=420
http://www.07net01.com/program/46610.html- CActiveDataProvider, CArrayDataProvider, CSqlDataProvider填充CGridView数据经验谈
- yii CArrayDataProvider 和 CActiveDataProvider区别
- YII中使用CActiveDataProvider、CDbCriteria和CGridView实现订单详情的显示
- yii CListView中使用CArrayDataProvider自定义数组作为数据
- 数据填充
- 20120620数据挖掘经验谈
- yii 1.1.*中数据提供者CActiveDataProvider和列表显示组件CListView的使用
- Yii: CGridView设置关联表格数据过滤和排序
- Yii: CGridView设置关联表格数据过滤和排序
- Yii中CGridView单元格组件和数据提供者的使用
- yii CActiveDataProvider的使用方法
- 给Repeater填充数据
- 数据填充代码片段
- 数据集报表填充
- textbox填充编辑数据
- Gridview数据填充
- vb.net 填充数据
- 0421Oracle数据填充
- alias 命令的用法
- poj 1061 青蛙的约会 二元一次不定方程 http://poj.org/problem?id=1061
- 关于 linux 的环境变量设置及 export 的用法
- LINUX下性能分析工具简单介绍
- 2013-07-03
- CActiveDataProvider, CArrayDataProvider, CSqlDataProvider填充CGridView数据经验谈
- VLFeat SIFT with OpenCV + Code
- How to convert an OpenCV cv::Mat into a float* that can be fed into Vlfeat vl_dsift_process ?
- CareerCup 4.5
- 字段名称不能是group,至少sqlite中,保留关键字?
- linux下top命令使用
- 如何编写Makefile文件
- HsqlDB使用
- springsecurity-sample中hsqldb的使用注意