【问题标题】:Yii CArrayDataProvider does not update active page on GridViewYii CArrayDataProvider 不更新 GridView 上的活动页面
【发布时间】:2014-02-06 08:49:18
【问题描述】:

我正在使用 yii 引导小部件 TbGridView 来查看我的数据库表中的数据。

每个页面请求我使用 offset 从我的 API 获取数据,并根据 API 的结果更新网格视图 databrovider >.

我为此使用了 CArrayDataProvider

我的问题是在第一次请求时它返回记录并在网格视图的 分页 上显示所有页面,当我单击分页上的任何页面时,它会按偏移量返回数据,但网格view 不会在点击的页面上添加活动类

我在分页选项中设置了 currentPage = 0,如果我删除此选项并单击分页上的任何页面,它会返回 no result found 虽然有结果在我的数据提供者上

我的代码是:

这是我的数据提供者

$offset = $limit * ($page_no-1) ;
$arr_transaction = $obj_transaction->getTransactionByOffset($offset);
$total_record    = $total_record = $obj_transaction->getTotalRecord();

$dp_transactions = new CArrayDataProvider($arr_transaction,
array('id'=>'transactions',
    'keyField' => false,
    'pagination'=>array(
        'pageSize'=>10,
        'params' => array('date_from' => $transaction_form->date_from,'date_to'=>$transaction_form->date_to),
        'currentPage'=>0,

    ),
    'totalItemCount'=>$total_record,
));

这是我的网格视图

<?php 

        $this->widget('bootstrap.widgets.TbGridView', array(
            'type'=>'striped bordered condensed',
            'dataProvider'=>$dp_transactions,
            'template' => "{summary}{items}{pager}",
            'enablePagination'=>true,
            'columns'=>array(
                array('name'=>'ust_order_Id', 'header'=>'Oreder Id'),
                array('name'=>'ust_create_time', 'header'=>'Transaction Time'),
                array('name'=>'ust_email', 'header'=>'Email'),
                array('name'=>'ust_mobile_number', 'header'=>'Mobile Number'),
                array('name'=>'ust_amount', 'header'=>'Amount'),
            ),
        )); 
    ?>

而且我不需要向CArrayDataProvide 提供所有数据

任何人都可以帮助我

谢谢

【问题讨论】:

  • 当你使用CArrayDataProvider时,你不需要设置offset,grid view会帮你处理
  • 感谢您的评论,我在 CArrayDataProvider 中不使用偏移量,我使用 offfest 从表中获取数据,因此每次 CArrayDataProvider 将只有 10 条记录。
  • 您在CArrayDataProvider 中设置'currentPage'=&gt;0,....尝试使用偏移量和限制计算当前页面

标签: php twitter-bootstrap yii


【解决方案1】:

这是CArrayDataProvider 的“缺陷”:数组的长度必须大于(CURRENT_PAGE-1) * PAGE_SIZE。 所以你可以将空值填充到你的数组中:

$offset = $limit * ($page_no-1) ; // it means $page_no is current page number
$arr_transaction = $obj_transaction->getTransactionByOffset($offset);
$total_record    = $total_record = $obj_transaction->getTotalRecord();

$arr_transaction = array_pad($arr_transaction, -1*(count($arr_transaction) + $offset), null);

$dp_transactions = new CArrayDataProvider($arr_transaction,
array('id'=>'transactions',
    'keyField' => false,
    'pagination'=>array(
        'pageSize'=>$limit, // $limit = 10 ?
        'params' => array('date_from' => $transaction_form->date_from,'date_to'=>$transaction_form->date_to),
        // 'currentPage'=>0, this not needed

    ),
    'totalItemCount'=>$total_record,
));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    相关资源
    最近更新 更多