在 Yii gridview 分页中保留复选框值

2023-11-21

我有一个 gridview,其中包含一个复选框列,并且还使用分页。当我选中第一页中的某些复选框并导航到第二页并选中第二页中的另一个复选框时,我在第一页中选中的选项不会保留在那里。分页期间是否可以保留复选框值?

Gridview 的代码是

$widget = $this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'     => $model->search(),
    'cssFile'          => Yii::app()->baseUrl . '/media/js/admin/css/admingridview.css',
    //'filter' => $model,
    'ajaxUpdate'       => true,
    'enablePagination' => true,
    'columns'          => array(
        array(
            'name'   => 'id',
            'header' => '#',
            'value'  => '$this->grid->dataProvider->pagination->currentPage * $this->grid->dataProvider->pagination->pageSize + ($row+1)',
        ),
        array(
            'class'          => 'CCheckBoxColumn',
            'selectableRows' => '2',
            'header' => 'Selected',
        ),
        array(
            'name'   => 'fb_user_id',
            'header' => 'FaceBook Id',
            'value'  => 'CHtml::encode($data->fb_user_id)',
        ),
        array(
            'name'   => 'first_name',
            'header' => 'Name',
            'value'  => 'CHtml::encode($data->first_name)',
        ),
        array(
            'name'   => 'email_id',
            'header' => 'Email',
            'value'  => 'CHtml::encode($data->email_id)',
        ),
        array(
            'name'   => 'demo',
            'type'   => 'raw',
            'header' => "Select",
            'value'  => 'CHtml::checkBox("email[]","",array("class"=>"check","value"=>$data->email_id))',
        ),
    ),
));

Edit:

用于记住 gridview 中所选选项的扩展,请检查此链接塞尔格视图

谢谢bool.dev


您可以使用会话/cookie 来存储检查的值。我不太确定如何使 cookie 发挥作用,所以我将告诉您如何通过会话来做到这一点。特别是 yii 创建的用户会话。

现在要使用会话,我们需要将已检查(和未检查)的 id 传递给控制器​​,因此我们将在每次 ajax 更新(即分页之间)时修改发送到控制器的数据,为此,我们利用beforeAjaxUpdate的选项网格视图.

我也在用CCheckBoxColumn instead您的代码中包含以下内容(当然您可以修改解决方案以满足您自己的需要):

array(
     'name' => 'demo',
     'type'=>'raw',
     'header' => "Select",
     'value' => 'CHtml::checkBox("email[]","",array("class"=>"check","value"=>$data->email_id))',
),

网格视图更改:

<?php $this->widget('zii.widgets.grid.CGridView', array(
    // added id of grid-view for use with $.fn.yiiGridView.getChecked(containerID,columnID)
    'id'=>'first-grid',

    'dataProvider'=>$model->search(),
    'cssFile' => Yii::app()->baseUrl . '/media/js/admin/css/admingridview.css',

    // added this piece of code
    'beforeAjaxUpdate'=>'function(id,options){options.data={checkedIds:$.fn.yiiGridView.getChecked("first-grid","someChecks").toString(),
        uncheckedIds:getUncheckeds()};
        return true;}',

    'ajaxUpdate'=>true,
    'enablePagination' => true,
    'columns' => array(
            array(
                 'name' => 'id',
                 'header' => '#',
                 'value' => '$this->grid->dataProvider->pagination->currentPage * $this->grid->dataProvider->pagination->pageSize + ($row+1)',
            ),
            array(
                 'name' => 'fb_user_id',
                 'header' => 'FaceBook Id',
                 'value' => 'CHtml::encode($data->fb_user_id)',
            ),
            array(
                 'name' => 'first_name',
                 'header' => 'Name',
                 'value' => 'CHtml::encode($data->first_name)',
            ),
            array(
                 'name' => 'email_id',
                 'header' => 'Email',
                 'value' => 'CHtml::encode($data->email_id)',
            ),

            /* replaced the following with CCheckBoxColumn
              array(
                 'name' => 'demo',
                 'type'=>'raw',
                 'header' => "Select",
                 'value' =>'CHtml::checkBox("email[]","",array("class"=>"check","value"=>$data->email_id))',
              ),
            */

            array(
                 'class' => 'CCheckBoxColumn',
                 'selectableRows' => '2',
                 'header'=>'Selected',
                 'id'=>'someChecks', // need this id for use with $.fn.yiiGridView.getChecked(containerID,columnID)
                 'checked'=>'Yii::app()->user->getState($data->email_id)', // we are using the user session variable to store the checked row values, also considering here that email_ids are unique for your app, it would be best to use any field that is unique in the table
            ),
    ),
));
?>

特别注意以下代码beforeAjaxUpdate和 CCheckBoxColumn,在 beforeAjaxUpdate 中我们传递checkedIds作为已检查的所有 id(在本例中为 email_ids)的 csv 字符串uncheckedIds作为所有未选中 id 的 csv 字符串,我们通过调用函数获取未选中的框getUncheckeds(),随后不久。请注意,当我测试时,我使用了(我的表中的)整数 id 字段作为唯一字段,而不是电子邮件字段。

The getUncheckeds()函数可以像这样在 gridview 的视图文件中的任何位置注册:

Yii::app()->clientScript->registerScript('getUnchecked', "
       function getUncheckeds(){
            var unch = [];
            /*corrected typo: $('[name^=someChec]') => $('[name^=someChecks]') */
            $('[name^=someChecks]').not(':checked,[name$=all]').each(function(){unch.push($(this).val());});
            return unch.toString();
       }
       "
);

在上面的函数中,请注意选择器和each and push功能。

完成后,我们需要修改该视图的控制器/操作。

public function actionShowGrid(){
     // some code already existing
     // additional code follows
     if(isset($_GET['checkedIds'])){
          $chkArray=explode(",", $_GET['checkedIds']);
          foreach ($chkArray as $arow){
               Yii::app()->user->setState($arow,1);
          }
     }
     if(isset($_GET['uncheckedIds'])){
          $unchkArray=explode(",", $_GET['uncheckedIds']);
          foreach ($unchkArray as $arownon){
               Yii::app()->user->setState($arownon,0);
          }
     }
     // rest of the code namely render()
}

就是这样,现在应该可以工作了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Yii gridview 分页中保留复选框值 的相关文章

随机推荐

  • 如何获得逻辑回归中 ROC 的最佳截止点作为数字

    我想将逻辑回归中 ROC 的最佳截止点作为数字而不是两条交叉曲线 使用下面的代码 我可以获得显示最佳点的图 但在某些情况下 我只需要该点作为可用于其他计算的数字 以下是代码行 library Epi ROC form IsVIP var1
  • D3:通过鼠标悬停查找图形 y 坐标

    我正在使用 D3 制作交互式面积图 将鼠标悬停在面积图上时 我希望有一个点沿着图表顶部滚动 如下例所示 http hci stanford edu jheer files zoo ex time multiples html 一旦获得鼠标位
  • 使用 heapy 追踪 Django 应用程序中的内存泄漏

    我在这里关注了如何使用 Django 设置 heapy 的优秀帖子 http www toofishes net blog using guppy debug django memory leaks 我已经命令 hp setref 现在过了
  • 带有 id 和逗号的 jQuery 选择器

    我在用我的表格网格在我的网页中显示类似 Excel 的控件 对于表 1 第 0 列 第 2 行 单元格使用诸如 mtgIC1 0 2 之类的 id 进行引用 不幸的是 当我尝试使用带有此 id 的 jQuery 选择器时 mtgIC1 0
  • 如何为一个类实例化多个 CDI/Weld bean?

    在 Spring 中 可以通过在 xml conf 中定义相应的 bean 来实例化任何类 也可以使用不同的参数为同一类实例化多个 bean CDI 中是否也有这样的功能 即是否可以使用不同的初始化参数创建同一类的不同实例 是否也可以在不更
  • 如何用 Java 测试互联网的可用性?

    当我从 url openStream 捕获异常时 我不想告诉大家互联网不可用 有没有一种简单的方法可以用Java判断计算机是否连接到互联网 在这种情况下 连接到互联网 意味着能够从特定的 URL 下载数据 如果我尝试从中下载但它不可用 则程
  • hibernate 验证器 - 创建、更新、删除时的不同组

    使用 bean 验证 特定的 hibernate 验证器实现是否可以定义某些组以自动用于某些 CRUD 操作 例如创建或更新 或者是否有一些内置的休眠组可以在内部检查这些操作 您可能正在寻找 Hibernate 基于事件的验证 under
  • 如果在 uib-tabset 中使用,值不会与作用域的变量绑定

    如果在内部使用 值不会与作用域的变量绑定uib 选项卡集 在下面的例子中我试图得到 scope messageuib tab 内部和外部 angular module app ui bootstrap controller myctrlr
  • MongoDB 聚合期间“服务器 x 超时”

    我有一个定期对 mongodb 集合运行聚合的脚本 随着数据集的增长 聚合所需的时间也随之增长 我的聚合脚本最近停止工作 错误日志显示 error MongoError server
  • WPF Toolkit Datagrid - 如何关闭选择?

    我在 WPF 中有一个数据网格 我将其绑定到一个对象 我在那里有一个 DataGridCheckBoxColumn 我希望用户能够浏览并勾选他们想要的 问题是他们必须单击两次 一次用于选择 然后再次单击 取消选中 你到底如何关闭这个功能 我
  • php获取唯一子数组[重复]

    这个问题在这里已经有答案了 我想在 PHP 中获得一个解决方案 以获取基于子数组基础的唯一数组 像这样 Array 0 gt Array 0 gt 1227 1 gt 146 2 gt 1 3 gt 39 1 gt Array 0 gt 1
  • 使用文本溢出:省略号;仅当达到 div 中的 3 行时[重复]

    这个问题在这里已经有答案了 这是我的 css 片段 test width 150px height 60px white space nowrap overflow hidden text overflow ellipsis o text
  • bouncycastle 连接到 android studio

    一天中的好时光 我需要以某种方式将 bouncycastle 库连接到 android studio 如何才能做到这一点 我以前从未处理过 这是我需要这个库的代码 Security addProvider new org bouncycas
  • 从 ArrayAdapter 获取FragmentManager

    我有一个由自定义 ArrayAdapter 填充的 listView 每个视图中都有一个按钮 我想在单击按钮时更改当前片段 这是我的代码 public class CheckInSArrayAdapter extends ArrayAdap
  • 求列表中向量的平均值

    我有一个 Vector3 列表 每个都有 x y z 值 List
  • 为什么两个不同对象上的哈希函数返回相同的值?

    我使用Spyder 运行Python 2 7 刚刚发现有趣的事情 hash 1 和hash 2 都返回 2 有问题吗 我认为不同对象上的哈希函数应该返回不同的值 我读过以前的文章 说 1 在 Python 中被保留为错误 hash s 返回
  • C# 支持返回类型协方差吗?

    我正在使用 NET 框架 我真的希望能够制作我的所有网站都使用的自定义类型的页面 当我尝试从控件访问页面时 问题就出现了 我希望能够返回特定类型的页面而不是默认页面 有什么办法可以做到这一点吗 public class MyPage Pag
  • 如何使用 PHP 在 heroku 上发送电子邮件?

    我已经创建了 PHP 应用程序并使用 heroku 进行了部署 在应用程序中 我有联系表格可以将邮件发送到我的 Gmail 帐户 为了实现这一点 我编写了以下 PHP 代码
  • 3 下拉菜单根据另一个[级联下拉菜单]中的选择进行填充

    我是 Java 脚本新手 这里我有 2 个下拉菜单的工作示例Fiddle HTML
  • 在 Yii gridview 分页中保留复选框值

    我有一个 gridview 其中包含一个复选框列 并且还使用分页 当我选中第一页中的某些复选框并导航到第二页并选中第二页中的另一个复选框时 我在第一页中选中的选项不会保留在那里 分页期间是否可以保留复选框值 Gridview 的代码是 wi