You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SQL查询数据在HTML页面以多组列表形式展示?

实现分组列表展示的解决方案

要实现按Column_A(MAN/WOMAN)和Column_B(FRUIT/BREAKFAST等)分层分组的表格展示,需要分两步修改代码:数据分组处理、HTML模板调整。

一、修改JavaScript代码,处理分组数据

将扁平数组转换为层级化的分组结构,方便HTML嵌套遍历:

function TESTTT($scope, $http) {
    // 计算分组总条目数,用于表格单元格合并
    $scope.getTotalRows = function(groupsB) {
        return groupsB.reduce((total, subGroup) => total + subGroup.items.length, 0);
    };

    // 数据分组函数:先按Column_A分组,再按Column_B分组
    function groupData(rawData) {
        const groupedObj = {};
        rawData.forEach(item => {
            // 初始化外层分组(Column_A)
            if (!groupedObj[item.Column_A]) {
                groupedObj[item.Column_A] = {};
            }
            // 初始化内层分组(Column_B)
            if (!groupedObj[item.Column_A][item.Column_B]) {
                groupedObj[item.Column_A][item.Column_B] = [];
            }
            // 将条目加入对应分组
            groupedObj[item.Column_A][item.Column_B].push(item);
        });
        // 转换为数组格式,适配ng-repeat遍历
        return Object.entries(groupedObj).map(([groupA, subGroupsObj]) => ({
            groupA: groupA,
            groupsB: Object.entries(subGroupsObj).map(([groupB, items]) => ({
                groupB: groupB,
                items: items
            }))
        }));
    }

    $scope.getData = function() {
        var serializedData = $.param({user:postUserName,password:postPassword,datasetName:'TEST_dATA',parameters:'X:\''+kullaniciNet+'\''});
        $http({
            method: 'POST',
            url: postUrl,
            data: serializedData,
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            }}).then(function(result) {
            // 模拟数据替换为实际接口返回的result.data
            const rawData = [
                { Column_A:"MAN", Column_B: "FRUIT", Column_C:  "BANANA ",Column_D:10}, 
                { Column_A:"MAN", Column_B: "FRUIT", Column_C:  "STRAWBERRY ", Column_D:15},
                { Column_A:"MAN", Column_B:  "BREAKFAST", Column_C:  "BUTTER",Column_D:20}, 
                { Column_A:"MAN", Column_B:  "VEGETABLE", Column_C:  "CARROT", Column_D:10},
                { Column_A:"WOMAN", Column_B:  "FRUIT", Column_C:  "BANANA", Column_D:5}, 
                { Column_A:"WOMAN", Column_B:  "BREAKFAST", Column_C:  "BUTTER", Column_D:20},
                { Column_A:"WOMAN", Column_B:  "BREAKFAST", Column_C:  "CHEESE", Column_D:5}
            ];
            // 生成分组后的数据
            $scope.groupedData = groupData(rawData);
        }, function(error) {
            console.log(error);
        });
    };
    $scope.getData();
}

二、修改HTML模板,实现分组展示

通过嵌套ng-repeat和单元格合并(rowspan),实现分层分组的视觉效果:

<div class="col-md-12">
    <div class="portlet-body" ng-controller="TESTTT">
        <div id="sample_1_wrapper" class="dataTables_wrapper no-footer">
            <div class="scroller table-responsive" style="overflow: hidden; width: auto; height: 750px;">
                <table class="table table-striped table-bordered table-hover">
                    <thead>
                        <tr>
                            <th style="text-align:center;font-weight:600;font-size:1em;">
                                1
                            </th>
                            <th style="text-align:center;font-weight:600;font-size:1em;">
                                2
                            </th>
                            <th style="text-align:center;font-weight:600;font-size:1em;">
                                3
                            </th>
                            <th style="text-align:center;font-weight:600;font-size:1em;">
                                4
                            </th>
                        </tr>
                    </thead>
                    <tbody>
                        <!-- 外层循环:遍历Column_A分组(MAN/WOMAN) -->
                        <tr ng-repeat-start="group in groupedData">
                            <!-- Column_A单元格,合并该分组下所有行 -->
                            <td rowspan="{{getTotalRows(group.groupsB)}}" style="text-align:left;">{{group.groupA}}</td>
                            <!-- 第一个Column_B分组的标题单元格,合并该子分组下所有行 -->
                            <td rowspan="{{group.groupsB[0].items.length}}">{{group.groupsB[0].groupB}}</td>
                            <!-- 子分组下第一个条目的内容 -->
                            <td>{{group.groupsB[0].items[0].Column_C}}</td>
                            <td>{{group.groupsB[0].items[0].Column_D}}</td>
                        </tr>
                        <!-- 遍历第一个Column_B分组下的剩余条目 -->
                        <tr ng-repeat="item in group.groupsB[0].items track by $index" ng-if="$index > 0">
                            <td>{{item.Column_C}}</td>
                            <td>{{item.Column_D}}</td>
                        </tr>
                        <!-- 遍历当前Column_A下的其他Column_B分组 -->
                        <tr ng-repeat-start="subGroup in group.groupsB track by $index" ng-if="$index > 0">
                            <td rowspan="{{subGroup.items.length}}">{{subGroup.groupB}}</td>
                            <td>{{subGroup.items[0].Column_C}}</td>
                            <td>{{subGroup.items[0].Column_D}}</td>
                        </tr>
                        <!-- 遍历当前Column_B分组下的剩余条目 -->
                        <tr ng-repeat-end ng-repeat="item in subGroup.items track by $index" ng-if="$index > 0">
                            <td>{{item.Column_C}}</td>
                            <td>{{item.Column_D}}</td>
                        </tr>
                        <tr ng-repeat-end></tr>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>

效果说明

最终表格会按Column_A(MAN/WOMAN)作为第一级分组,Column_B(FRUIT/BREAKFAST等)作为第二级分组,相同分组的单元格会自动合并,视觉上形成层级分明的分组列表,符合你需要的展示效果。

内容的提问来源于stack exchange,提问作者griffins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 22:55:31