CActiveDataProvider, CArrayDataProvider, CSqlDataProvider填充CGridView数据经验谈
2013-07-03 02:34
639 查看
转自: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属性设置查询条件。
2.CArrayDataProvider 基于数组,其中属性rawData设置原始数据,一般为数组或者DAO查询结果
3 。CSqlDataProvider 基于SQL查询,通过设置 sql语句来配置,比如:
我比较偷懒 按道理 $dataProvider直接在Controller里面 我只是做个例子 看的更清楚
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
这开始介绍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', //必须指定一个作为主键 ));
3 。CSqlDataProvider 基于SQL查询,通过设置 sql语句来配置,比如:
我比较偷懒 按道理 $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
相关文章推荐
- Using filters with CGridView and CArrayDataProvider
- yii在Controller中使用CActiveDataProvider获取数据列表
- YII中使用CActiveDataProvider、CDbCriteria和CGridView实现订单详情的显示
- yii CListView中使用CArrayDataProvider自定义数组作为数据
- Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
- yii CListView中使用CArrayDataProvider自定义数组作为数据
- 关于Yii 中使用CArrayDataProvider的CGridview 没有办法去自定义列的显示的问题
- Yii 关于CSqlDataProvider和CGridView的合并使用
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 使用SqlDataAdapter对象填充数据集
- sql 错误 未更新行1中的数据 错误源:.net sqlclient data provider
- Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
- sql 错误 未更新行1中的数据 错误源:.net sqlclient data provider
- sql 错误 未更新行1中的数据 错误源:.net sqlclient data provider
- SqlDataAdapter.FillSchema(DataTable)方法填充数据表的主键和约束
- ScottGu之博客翻译-第6部分-用存储过程检索数据-LINQ to SQL (Part 6 - Retrieving Data Using Stored Procedures)
- 使用 SqlDataReader 读取数据示例
- Windows Presentation Foundation(WPF)中的数据绑定(使用XmlDataProvider作控件绑定之二:使用外部URL的XML文件)
- 大数据插入类-System.Data.SqlClient.SqlBulkCopy
- Spark SQL和DataFrames支持的数据格式