BootstrapTable父子表

目录

1、案例图:

2、代码部分

 3、对JavaScript部分讲解


1、案例图:

1-1、展开父表的子表图:

1-2、在父表的每一行的最前面显示一个加号,点开就是子表信息

2、代码部分

2-1HTML、

<!-- 模态框 -->
<div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel"
		id="seatModal">
		<div class="modal-dialog seatFrame modal-lg" role="document">
			<div class="modal-content">
				<div class="modal-header">

                    <div style="display: flex;justify-content: space-between;">
					<h2 class="modal-title" id="myModalLabel">考场信息</h2>

                    <div class="input-group">
                        <span class="input-group-addon">考试场次<span id="seatInformationNo"></span></span>
                    </div>
					<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                    </div>
				</div>
				<div class="modal-body">
					<table id="trainingInformation" class="table table-striped table-hover" style="margin-top: 0px;">
                        <tbody id="seatTable">
                        </tbody>
                    </table>
				</div>
				<div class="modal-footer">
					<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
					<button type="button" class="btn btn-primary" id="sava-edit-btn">保存</button>
				</div>
			</div>
		</div>
	</div>

2-2、js部分




$("#seatButton").click(function () {
    debugger

    // 获取所有场次的考试列表
    let roomIndex = $("#seatSession").val()
    let roomData = Zax.roomData[roomIndex];
    $('#seatInformationNo').text(roomData.name)
    let selectedRoom = RoomDiv.selectedRoom
    let exams = Zax.roomData[selectedRoom].exams
    let users=RoomDiv.roomArray[selectedRoom]
    exams.filter(exam=>{
        let userArray=users.filter(user=>user.zaxExamId==exam.zaxExamId)
        exam.userArray=userArray
        console.log(exam.userArray);
    })
    $('#seatModal').modal();
    $('#trainingInformation').bootstrapTable('removeAll'); //清空表的数据

    $('#trainingInformation').bootstrapTable('append', exams);  //添加新的表数据

    $('#trainingInformation').bootstrapTable({
        data: exams,
        sortable: false,
        //search: true,
        pagination: true, //开启分页
        pageNumber: 1, //初始化加载第一页,默认第一页
        queryParamsType: 'limit', //查询参数组织方式
        pageSize: 10, //单页记录数
        pageList: [5, 10, 20, 30], //分页步进值
        toolbar: "#toolboxPlatfrom",
        singleSelect: false, //只选择一行
        maintainSelected: true, //开启分页保持选择状态,就是用户点击下一页再次返回上一页
        clickToSelect: true,
        showSearch: false,
        showRefresh: false,
        showToggle: false,
        showColumns: false,
        classes: "table  table-striped table-hover ", //这里设置表格样式
        detailView: true,
        columns:
            [
                {
                    checkbox: true
                },
                { field: 'zaxExamId', title: 'ID' },
                { field: 'name', title: '考试名称' },
                { field: 'subject', title: '科目' },
                { field: 'personType', title: '人员类型' },
                { field: 'timeStart', title: '开考时间' },
                { field: 'timeEnd', title: '结束时间' },
                { field: 'userArray.length', title:'当前人数'}
            ],

        //注册加载子表的事件
        onExpandRow: function (index, row, $detail) {
            //点击左侧的加号 展开查看详情的时候调用(加载子菜单)  在这里做了递归调用自身再次构建一张表   这里的child-table-row.id是为了修改或者删除,刷新子表使用
            createSubTable(index, row, $detail);
        },
        //加载成功之后执行
        onLoadSuccess: function (data) {
        }

    });
})





//加载子菜单列表
createSubTable = function (index, row, $detail) {
    debugger
    var parentId = row.menuId;
    let childData = row.userArray
    var childTable = $detail.html('<table></table>').find('table');
    $(childTable).bootstrapTable({
        data:childData,
        classes: 'table table-hover table-striped',
        sortable: false,
        //search: true,
        pagination: true, //开启分页
        pageNumber: 1, //初始化加载第一页,默认第一页
        queryParamsType: 'limit', //查询参数组织方式
        pageSize: 10, //单页记录数
        pageList: [5, 10, 20, 30], //分页步进值
        toolbar: "#toolboxPlatfrom",
        singleSelect: false, //只选择一行
        maintainSelected: true, //开启分页保持选择状态,就是用户点击下一页再次返回上一页
        clickToSelect: true,
        showSearch: false,
        showRefresh: false,
        showToggle: false,
        showColumns: false,
        detailView: false,
        columns: [
            {
                checkbox: true
            },
            { field: 'zaxExamId', title: 'ID' },
            { field: 'name', title: '姓名' },
            { field: 'subject', title: '科目' },
            { field: 'personType', title: '人员类型' },
            { field: 'seatNo', title: '座位' },


        ],
    })
};


$('#seatModal').modal('hide');












2-3、css部分可以自己随意发挥

 3、对JavaScript部分讲解

3-1、对表中的部分进行解释:

"classes": "定义Bootstrap样式。'table'表示表格,'table-hover'使得鼠标悬停在表格行上时会有浅灰色背景,'table-striped'使得表格的奇数行和偶数行有不同的背景颜色。",

"sortable": "是否允许表格内容排序。在此设为'false',表示不允许。",

"pagination": "是否开启分页。这里设为'true',表示开启。",

"pageNumber": "初始化加载的页码。这里设为'1',表示默认加载第一页。",

"queryParamsType": "查询参数的组织方式。这里设为'limit',表示使用'limit'方式组织查询参数。",

"pageSize": "单页显示的记录数量。这里设为'10',表示每页显示10条记录。",

"pageList": "分页的步进值,即用户可以选择的分页大小列表。这里设为[5, 10, 20, 30],表示用户可以选择每页5、10、20或30条记录。",

"toolbar": "定义工具栏的HTML元素。这里设为'#toolboxPlatfrom',表示工具栏的HTML元素是id为'toolboxPlatfrom'的元素。",

"singleSelect": "是否只允许选择一行。这里设为'false',表示不允许(可以多选)。",

"maintainSelected": "是否在分页时保持已选择的行。这里设为'true',表示保持选择状态。",

"clickToSelect": "是否允许点击行来选择。这里设为'true',表示允许。",

"showSearch": "是否显示搜索框。这里设为'false',表示不显示。",

"showRefresh": "是否显示刷新按钮。这里设为'false',表示不显示。",

"showToggle": "是否显示切换显示/隐藏列的按钮。这里设为'false',表示不显示。",

"showColumns": "是否显示列选择框。这里设为'false',表示不显示。",

"detailView": "是否显示详情折叠(开启父子表),会在每一行的最前面显示一个加号。"

3-2、在要增加了一个新表的时候,直接清空表的数据,添加新数据就使用sppend就行了,清空数据使用removeAll方法。对比使用create方法的话,removeAll比create方法性能优化方面强很多,不建议使用create方法创建表。

3-3、对于父表的数据生成了要增加子表的方法是:

 detailView: true,   //是否显示详情折叠(开启父子表),会在每一行的最前面显示一个加号


//注册加载子表的事件
        onExpandRow: function (index, row, $detail) {
            //点击左侧的加号 展开查看详情的时候调用(加载子菜单)  在这里做了递归调用自身再次构建一张表   这里的child-table-row.id是为了修改或者删除,刷新子表使用
            createSubTable(index, row, $detail);
        },
        //加载成功之后执行
        onLoadSuccess: function (data) {
        }

这两行代码不能少,这样就在父表下创建了子表,子表的数据就是row,index,$detail,对应着子表可以去取数据。

参考地址: