要实现<t:datagrid>的显示隐藏列功能,可以使用bootstrapTable的showColumns和hideColumns方法。

首先,在<t:datagrid>标签上添加一个按钮,用于触发显示隐藏列功能:

<t:datagrid id="myTable" ...>
    ...
    <a href="javascript:void(0);" onclick="showHideColumns()">显示/隐藏列</a>
</t:datagrid>

然后,在页面中引入bootstrapTable的JS文件和CSS文件:

<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap-table/1.11.1/bootstrap-table.min.css">
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap-table/1.11.1/bootstrap-table.min.js"></script>

接下来,编写showHideColumns函数:

function showHideColumns() {
    var columns = $('#myTable').bootstrapTable('getOptions').columns[0]; // 获取表格的列信息
    var visibleColumns = []; // 存储当前可见的列名
    for (var i = 0; i < columns.length; i++) {
        if (columns[i].visible) {
            visibleColumns.push(columns[i].field);
        }
    }
    var options = ''; // 存储列名的选项
    for (var i = 0; i < columns.length; i++) {
        options += '<label><input type="checkbox" value="' + columns[i].field + '"';
        if (columns[i].visible) {
            options += ' checked';
        }
        options += '> ' + columns[i].title + '</label>';
    }
    // 弹出模态框,显示所有列名的选项
    BootstrapDialog.show({
        title: '列名',
        message: options,
        buttons: [{
            label: '确定',
            action: function(dialog) {
                var checkedColumns = []; // 存储选中的列名
                dialog.getModalBody().find('input[type="checkbox"]:checked').each(function() {
                    checkedColumns.push($(this).val());
                });
                // 显示选中的列,隐藏未选中的列
                $('#myTable').bootstrapTable('showColumns', checkedColumns);
                $('#myTable').bootstrapTable('hideColumns', difference(visibleColumns, checkedColumns));
                dialog.close();
            }
        }]
    });
}

// 求两个数组的差集
function difference(arr1, arr2) {
    var arr = [];
    for (var i = 0; i < arr1.length; i++) {
        if (arr2.indexOf(arr1[i]) === -1) {
            arr.push(arr1[i]);
        }
    }
    return arr;
}

最后,运行页面,点击“显示/隐藏列”按钮,就可以弹出模态框,显示所有列名的选项。选中要显示的列,点击“确定”,就可以显示选中的列,隐藏未选中的列。


原文地址: https://www.cveoy.top/t/topic/KNV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录