当需要构建 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. Java Design Demo -简单的队列-异步多任务队列(java android)

    简单的单线程队列 -- 工作的时候遇到劣质打印机.给打印机发消息,打印机就会打印,如果在打印机还在打印的时候,就 再发消息打印,就会出现消息丢失.所以需要给上一个任务一些处理的间隔时间. 单线程的消息 ...

  2. INFORMIX 时间函数大全

    http://publib.boulder.ibm.com/infocenter/idshelp/v115/index.jsp?topic=/com.ibm.sqls.doc/ids_sqs_0187 ...

  3. c coding style之学习篇

    1. 使用do-while结构去避免潜在的内存泄漏问题. do {     p1 = malloc(10);     if (null == p1)     {         break;     ...

  4. extern 使用方法具体解释

    在C语言中,修饰符extern用在变量或者函数的声明前,用来说明"此变量/函数是在别处定义的.要在此处引用".(extern能够置于变量或者函数前,以标示变量或者函数的定义在别的文 ...

  5. RF+Selenium2Library+Sikuli集成环境搭建

    Sikuli是通过截图来编写代码的脚本语言,他是对于Selenium不好处理的一些模态窗口.flash等的利器.废话少说,直接开始安装吧.安装RF+Selenium2Library的环境这里就不说了, ...

  6. POJ 1159 - Palindrome 优化空间LCS

    将原串和其逆序串的最长公共子序列求出来为M..那么2*n-M就是所需要加的最少字符..因为求出的M就是指的原串中"潜伏"的最长回文.. 问题转化为求LCS..但是n最大到5000. ...

  7. pdftk的使用介绍

    首先像下面的一页pdf,如果想把它分成两页,每一页只是一个ppt页面(为了在kindle里读比较方便), 那么可以首先用A-pdf page cut, 将pdf 切成这样12个部分 然后我们现在要的只 ...

  8. Eclipse 每次打开workspace目录记录位置?

    E:\eclipse_j2ee eclipse安装根目录 在这个文件下: E:\eclipse_j2ee\configuration\.settings\org.eclipse.ui.ide.pref ...

  9. oracle 之 内存—鞭辟近里(一)

    oracle 之 内存—鞭辟近里(一) 今天是2013-07-8日,这几天一直都在寻找一本深入研究oracle内存的书籍,期间一波三折弄的自己神魂颠倒,但是还是被我拿下了,感谢支持我的朋友,这周打算把 ...

  10. 使用notepad运行python

    Notepad++ 是一个开源的文本编辑器,功能强大而且使用方便,一般情况下,Notepad++作为代码查看器,很方便,但是每次要运行的时候,总是需要用右键打开其他的IDE来编译和运行,总有些不方便. ...