【问题标题】:Select all record of all page in checkbox column of gridview yii2在gridview yii2的复选框列中选择所有页面的所有记录
【发布时间】:2016-01-17 05:08:57
【问题描述】:

我想知道 yii2 gridview 复选框列中是否有任何内置选项可以一次选择/取消选择所有行..

例如,如果我在 gridview 中有 500 条记录,而我一次显示 100 条记录,那么我只能一次选择 100 条记录并执行任何批量操作。

我希望用户能够一次选择所有 500 条记录,并一次对这些记录执行任何批量操作.. 希望大家都能得到我的问题

我在github 上向 yii 框架所有者提出了一个建议,他们已经确认他们将尽快进行此增强并将此问题放在增强部分,因此希望他们能尽快将其包含在内,但在那之前指导我以任何替代方式实现这一目标

谢谢

【问题讨论】:

    标签: php gridview yii2 yii2-advanced-app


    【解决方案1】:

    是的,您可以使用CheckBoxColumn。只需将以下行添加到您的 GridView 的列数组中:

    [
         'class' => 'yii\grid\CheckboxColumn',
         'name' => 'id'
    ],
    

    作为Yii2's官方文档:

    CheckboxColumn 在网格视图中显示一列checkboxes 要将CheckboxColumn 添加到yii\grid\GridView,请将其添加到列配置中,如下所示:

    'columns' => [
    // ...
        [
            'class' => 'yii\grid\CheckboxColumn',
            // you may configure additional properties here
        ],
    ]
    

    用户可以点击checkboxes 来选择网格的行。可以通过调用以下JavaScript代码获取选中的行:

    var keys = $('#grid').yiiGridView('getSelectedRows');
    // keys is an array consisting of the keys associated with the selected rows
    

    【讨论】:

    • 我已经实现了..但我的问题有点不同..考虑到我在网格中有 500 条记录..我每页只显示 100 行..如果我必须一次选择所有 500 行并对所有 500 行执行共同操作,而不是从第一页开始...我希望你明白我的意思
    • @MikeRoss 你请检查这个答案stackoverflow.com/a/30066826/959939
    【解决方案2】:

    您必须通过在使用分页时执行发布请求(序列化表单并执行 ajax 请求)来“保存”每个分页上的选定网格项目。 然后使用提交的 id 在您的页面上有一些预选部分。

    在此预选部分中,将一些复选框(复选框组)呈现到具有预选 id 的页面,这些 id 不在您当前的网格页面上,并用一个简单的文本指示它是哪个项目(名称等)。

    因此,在您当前的网格页面上,您选择带有网格复选框的项目,当您分页时,这些“选定”复选框会在此预选部分呈现。

    这样您可以在多个页面上选择项目,也可以取消选择不在页面上的项目。

    在您的“操作”上,您只需将两个复选框组组合起来即可获得所有选定的项目。

    提到了here yii1 有类似的东西

    还有一个 yii1 扩展可以做到这一点here也许你会复制 yii2 中的代码或找到一些类似的扩展。

    【讨论】:

      【解决方案3】:

      默认情况下,这是不可能的(还)。但是您可以保存密钥以备后用。这是基本的想法,我希望它能给你一个开始。

      <script type="text/javascript">
      $(document).ready(function (){
          var selectedItems = [];
      
          $('#delete_selected_items_btn').click(function (){
              selectedItems = selectedItems.concat($('.grid-view').yiiGridView('getSelectedRows'));
              // select all rows on page 1, go to page 2 and select all rows.
              // All rows on page 1 and 2 will be selected.
              console.log(selectedItems); 
          })
      })
      </script>
      

      我的假设是您将 Pjax 用于 gridview。

      【讨论】:

      • 感谢您的回答,但现在我创建了接受 eventid 的额外操作,并且我找到了该事件的所有键并从单独的操作中发送。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      • 2015-07-05
      • 2016-06-05
      • 2015-08-12
      • 1970-01-01
      相关资源
      最近更新 更多