当需要构建 GridView的时候;

常常用 CArrayDataProvider 或者 CActiveDataProvider
这是就需要一个CActiveRecord

比如:

 857         $sql = "SELECT * FROM zhuanli_applicantCount where kId=:kId order by percentage desc";

 858        
 
$rawData= model_applicant::model()->findAllBySql($sql,array('kId'=>$KDValue));

 859         $IDARRAY = array();

 860         

 861         $paginationTop = new CPagination(sizeof($rawData));

 862         $paginationTop->pageVar = 'page';

 863         $paginationTop->pageSize= 10;

 864         $paginationButtom = clone $paginationTop;

 865         $dataProvider =
 
new CArrayDataProvider($rawData, array(

 866             'keyField'=>false,

 867         ));

 868         $this->render('applicantListMore', array(

 869             'dataProvider'=>$dataProvider,

 870             'paginationTop'=>$paginationTop,

 871             'totalItemCount'=>sizeof($rawData),

 872             'paginationButtom'=>$paginationButtom,

 873         ));






如果需要展示的数据主题并不在一个数据表中,而是我们用Coreseek得到的一个数组,或者就是一个普通的数组

如何用数组数据来展现 GridView视图呢?

首先可以去看下$dataProvider =
 
new CArrayDataProvider($rawData, array(

的数据结构

object(CArrayDataProvider)#37 (10) {

  ["keyField"]=>

  bool(false)

 
 
["rawData"]=>
  array(24) {
    [0]=>
    array(2) {
      ["provinceId"]=>
      string(2) "11"
      ["provinceName"]=>
      string(9) "江苏省"
    }
……
……
    [23]=>
    array(2) {
      ["provinceId"]=>
      string(2) "15"
      ["provinceName"]=>
      string(9) "江西省"
    }
  }

  ["_id":"CDataProvider":private]=>
  NULL
  ["_data":"CDataProvider":private]=>
  NULL
  ["_keys":"CDataProvider":private]=>
  NULL
  ["_totalItemCount":"CDataProvider":private]=>
  NULL
  ["_sort":"CDataProvider":private]=>
  NULL
  ["_pagination":"CDataProvider":private]=>
  NULL
  ["_e":"CComponent":private]=>
  NULL
  ["_m":"CComponent":private]=>
  NULL
}
好,那我们想要的结果是最后能够

  $dataProvider = new CArrayDataProvider($IDARRAY, array(

那就来构建这个数组


 734         $IDARRAY = array();

 735         $total =0;

 736         $totalItemCount = 0;

 737         if($result['total'])

 738         {

 739             foreach($result['matches'] AS $k=>$v)

 740             {

 741                 $IDARRAY[] = array('site_name'=>$v['attrs']['site_name'],'count'=>$v['attrs']['@count']);

 742                 $total+= $v['attrs']['@count'];

 743             }

 744             $totalItemCount = $result['total'];

 745             $this->sourceMoreIDARRAY=$IDARRAY;

 746             $this->sourceMoreNum=$total;

 747         }       

 748                 

 749         $paginationTop = new CPagination($totalItemCount);

 750         $paginationTop->pageVar = 'page';

 751         $paginationTop->pageSize= 10;

 752         $paginationButtom = clone $paginationTop;

 753       
  $dataProvider = new CArrayDataProvider($IDARRAY, array(

 754             'keyField'=>false,
 755         ));
 756         
 757         $this->render('sourceListMore', array(
 758             'dataProvider'=>$dataProvider,
 759             'paginationTop'=>$paginationTop,
 760             'totalItemCount'=>$totalItemCount,
 761             'paginationButtom'=>$paginationButtom,
 762         ));
来看下

$dataProvider = new CArrayDataProvider($IDARRAY, array(

object(CArrayDataProvider)#37 (10) {
  ["keyField"]=>
  bool(false)
  ["rawData"]=>
  array(456) {
    [0]=>
    array(2) {
      ["site_name"]=>
      string(0) ""
      ["count"]=>
      int(3046)
    }
    [1]=>
    array(2) {
      ["site_name"]=>
      string(9) "易车网"
      ["count"]=>
      int(904)
    }
    [455]=>
    array(2) {
      ["site_name"]=>
      string(9) "科技讯"
      ["count"]=>
      int(1)
    }
  }
  ["_id":"CDataProvider":private]=>
  NULL
  ["_data":"CDataProvider":private]=>
  NULL
  ["_keys":"CDataProvider":private]=>
  NULL
  ["_totalItemCount":"CDataProvider":private]=>
  NULL
  ["_sort":"CDataProvider":private]=>
  NULL
  ["_pagination":"CDataProvider":private]=>
  NULL
  ["_e":"CComponent":private]=>
  NULL
  ["_m":"CComponent":private]=>
  NULL
}

OK ,成功,其实用着样的方法,比用SQL 是不是要方便很多?



但是应该适用于,GridView中 column没几个的情况。

如果有很多Column,一般都是某个数据表的数据要展示,当然就用CActiveRecord

$rawData= model_applicant::model()->findAllBySql($sql,array('kId'=>$KDValue));

用数组array代替CActiveRecord构建CArrayDataProvider的更多相关文章

  1. 数组 array 矩阵 list 数据框 dataframe

    转自 :  http://blog.csdn.net/u011253874/article/details/43115447 <span style="font-size:14px;& ...

  2. 数组array的常用方法简介

    数组方法简介 数组总共有22种方法,本文将其分为以下几类来进行详细介绍. 原数组变化:push() pop() shift() unshift() reverse() sort() splice() ...

  3. Java ArrayList和Vector、LinkedList与ArrayList、数组(Array)和列表集合(ArrayList)的区别

    ArrayList和Vector的区别ArrayList与Vector主要从二方面来说.  一.同步性:   Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步 ...

  4. go 数组(array)、切片(slice)、map、结构体(struct)

    一 数组(array) go语言中的数组是固定长度的.使用前必须指定数组长度. go语言中数组是值类型.如果将数组赋值给另一个数组或者方法中参数使用都是复制一份,方法中使用可以使用指针传递地址. 声明 ...

  5. javascript类型系统——数组array

    × 目录 [1]创建 [2]本质 [3]稀疏[4]长度[5]遍历[6]类数组 前面的话 除了对象之外,数组Array类型可能是javascript中最常用的类型了.而且,javascript中的数组与 ...

  6. swift基本用法-数组array

    数组简单用法 //------------------------------------------------------------------------------ // 1. 数组定义 / ...

  7. C#中数组Array、ArrayList、泛型List<T>的比较

    在C#中数组Array,ArrayList,泛型List都能够存储一组对象,但是在开发中根本不知道用哪个性能最高,下面我们慢慢分析分析. 一.数组Array 数组是一个存储相同类型元素的固定大小的顺序 ...

  8. Javascript基础系列之(四)数据类型 (数组 array)

    字符串,数值,布尔值都属于离散值(scalar),如果某个变量是离散的,那么任何时候它只有一个值. 如果想使用变量存储一组值,就需要使用数组(array). 数组是由多个名称相同的树值构成的集合,集合 ...

  9. AS3 - 数组Array的几个常用方法(附样例)

    AS3 - 数组Array的几个常用方法(附样例) 2015-03-30 10:39发布:hangge浏览:241   Flex/Flash开发中,经常会使用到数组,下面总结了一些数组的常用方法. 1 ...

随机推荐

  1. c++ :: 域操作符

    c++ :: 域操作符 作用域:变量在程序中的起作用范围简单分为:全局作用域,局部作用域,语句作用域作用域优先级:范围越小优先级越高作用域运算符:"::" 如果希望在局部变量的作用 ...

  2. linux下远程管理利器-tmux

    linux下远程管理利器-tmux 1.控制键       控制键就是tmux的主键.当你在tmux环境下按下这个键的时候,tmux就会把你后面输入的指令,解析成它内置的功能.tmux默认的控制键是 ...

  3. 浅析innodb_support_xa与innodb_flush_log_at_trx_commit

    很久以前对innodb_support_xa存在一点误解,当初一直认为innodb_support_xa只控制外部xa事务,内部的xa事务是mysql内部进行控制,无法人为干预(这里说的内部xa事务主 ...

  4. JAVA的反射机制学习笔记(二)

    上次写JAVA的反射机制学习笔记(一)的时候,还是7月22号,这些天就瞎忙活了.自己的步伐全然被打乱了~不能继续被动下去.得又一次找到自己的节奏. 4.获取类的Constructor 通过反射机制得到 ...

  5. linux 怎么使用一个c/c++库

    linux 怎么使用一个c/c++库 使用一个库,库有动态和静态之分. 静态库只要能够编译通过,运行时就没有提示缺少这个库可能,因为把这个库就是这个使用者的一部分了.动态库.两部分.1 库信息的注册 ...

  6. GCC编译优化指南【作者:金步国】

    GCC编译优化指南[作者:金步国] GCC编译优化指南 作者:金步国 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分 ...

  7. IBinder在进程之间传递一个对象的形式(一)

    主张 什么时候service通常被称为远程时的,用到aidl来定一个接口供service和client来使用,这个事实上就是使用Binder机制的IPC通信.当client bind service成 ...

  8. 11.4.2 排序或合并文件(sort命令) - 51CTO.COM

    11.4.2 排序或合并文件(sort命令) - 51CTO.COM 11.4.2 排序或合并文件(sort命令) 2010-03-12 14:37 陆松年 电子工业出版社 我要评论(0) 字号:T ...

  9. Kaggle—Digit Recognizer竞赛

    Digit Recognizer 手写体数字识别  MNIST数据集 本赛 train 42000样例 test 28000样例,原始MNIST是 train 60000 test 10000 我分别 ...

  10. uva 1510 - Neon Sign(计数)

    题目链接:uva 1510 - Neon Sign 题目大意:给定n个点,随意三点不共线,而且两两点之间有一条线,给定线的颜色.问说有多少个三角形三边同色. 解题思路:对于每一个点.记录该点黑色边的数 ...