jQuery EasyUI 数据网格 – 创建列组合(长文讲解)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

在现代 Web 开发中,数据可视化与交互性始终是提升用户体验的核心要素。jQuery EasyUI 数据网格作为一款功能强大的前端组件库,凭借其直观的 API 设计和丰富的功能模块,成为开发者快速构建数据表格的首选工具。而“创建列组合”这一特性,更是让开发者能够灵活地将相关字段分组展示,如同在文件管理器中将文件按类别整理到不同文件夹中一样,让复杂的数据结构变得清晰易读。

本文将从零开始,通过循序渐进的步骤,讲解如何利用 jQuery EasyUI 的数据网格(DataGrid)组件实现列组合功能。无论是编程初学者还是有一定经验的开发者,都能通过本文掌握这一实用技能,并在实际项目中快速应用。


一、理解数据网格与列组合的基础概念

1.1 数据网格(DataGrid)的核心作用

jQuery EasyUI 的数据网格是一种高度可定制的表格组件,能够将后端返回的 JSON 数据以直观的表格形式呈现,并支持分页、排序、过滤等交互功能。它通过定义 columns 参数来配置表格的列结构,每列对应数据中的一个字段。

类比说明
想象一个图书馆的书架,每一列代表一个分类(如“小说”“科技”),每一行代表一本书。数据网格的作用就是将这些书籍(数据)按分类(列)排列,让用户快速浏览和管理。

1.2 列组合(Column Grouping)的实现逻辑

列组合允许开发者将多个相关列分组,形成类似“子表格”的结构。例如,在展示员工信息时,可将“姓名”“职位”分组为“个人信息”,“入职日期”“薪资”分组为“工作信息”。这种分组方式通过 fieldtitlecolumns 等参数的嵌套实现。

技术要点

  • field:定义该分组的唯一标识符,通常不显示在界面上。
  • title:设置分组的标题名称。
  • columns:嵌套数组,包含该分组内的具体列配置。

二、创建基础数据网格与列组合的步骤

2.1 环境准备与基本结构搭建

在开始前,需确保项目已引入 jQuery 和 EasyUI 的 CSS/JS 文件。以下是一个最简 HTML 模板:

<!DOCTYPE html>  
<html>  
<head>  
    <title>EasyUI DataGrid 列组合示例</title>  
    <link rel="stylesheet" href="https://www.jeasyui.com/easyui/themes/default/easyui.css">  
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>  
    <script src="https://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>  
</head>  
<body>  
    <table id="dataGrid"></table>  
</body>  
</html>  

2.2 配置基础数据网格

使用 $('#dataGrid').datagrid({ ... }) 初始化数据网格,并定义基础列:

$(function() {  
    $('#dataGrid').datagrid({  
        url: 'data.json', // 数据接口路径  
        columns: [[  
            {field: 'id', title: 'ID', width: 80},  
            {field: 'name', title: '姓名', width: 120},  
            {field: 'age', title: '年龄', width: 80},  
            {field: 'department', title: '部门', width: 150}  
        ]],  
        fitColumns: true // 自动调整列宽  
    });  
});  

此时,表格会展示来自 data.json 的数据,但尚未实现列组合功能。


三、实现列组合的详细步骤

3.1 第一步:定义分组结构

通过嵌套 columns 数组实现分组。例如,将“姓名”和“年龄”分组为“个人信息”,“部门”单独作为另一组:

columns: [[  
    {  
        field: 'personal', // 分组唯一标识  
        title: '个人信息', // 分组标题  
        columns: [ // 嵌套列配置  
            {field: 'name', title: '姓名', width: 120},  
            {field: 'age', title: '年龄', width: 80}  
        ]  
    },  
    {  
        field: 'work',  
        title: '工作信息',  
        columns: [  
            {field: 'department', title: '部门', width: 150},  
            {field: 'position', title: '职位', width: 100}  
        ]  
    }  
]]  

3.2 第二步:调整布局与样式

默认情况下,分组标题会横向排列。若需垂直分组(如左侧显示分组名,右侧显示子列),需通过 CSS 调整:

/* 在样式表中添加 */  
.datagrid-cell-group {  
    padding: 5px 10px;  
    background-color: #f0f0f0;  
    font-weight: bold;  
}  

3.3 第三步:处理数据与验证

确保后端返回的 JSON 数据包含所有字段,例如:

[  
    {  
        "id": 1,  
        "name": "张三",  
        "age": 28,  
        "department": "技术部",  
        "position": "前端工程师"  
    },  
    // 其他数据条目...  
]  

四、进阶技巧与常见问题解决

4.1 动态列组合的实现

在某些场景下,列组合可能需要根据用户操作动态增减。可通过 $('#dataGrid').datagrid('getColumnFields', true) 获取当前列配置,并重新渲染表格:

function addGroup() {  
    var newColumns = [  
        {  
            field: 'newGroup',  
            title: '新分组',  
            columns: [  
                {field: 'newField', title: '新字段', width: 100}  
            ]  
        }  
    ];  
    var existingColumns = $('#dataGrid').datagrid('options').columns;  
    existingColumns[0] = existingColumns[0].concat(newColumns);  
    $('#dataGrid').datagrid('loadData', {total: 0, rows: []}); // 重置数据  
    $('#dataGrid').datagrid('reload'); // 重新加载  
}  

4.2 复杂数据的格式化与合并

4.2.1 自定义列格式化

通过 formatter 函数对列内容进行动态渲染,例如将年龄转换为文字描述:

{  
    field: 'age',  
    title: '年龄',  
    formatter: function(value) {  
        return value + ' 岁(' + (value < 30 ? '年轻' : '资深') + ')';  
    }  
}  

4.2.2 单元格合并(Rowspan/Colspan)

EasyUI 支持通过 rowspancolspan 属性合并单元格,但需结合 onAfterRender 事件实现:

$('#dataGrid').datagrid({  
    // 其他配置...  
    onAfterRender: function() {  
        var rows = this.datagrid('getRows');  
        for (var i = 0; i < rows.length; i++) {  
            var row = rows[i];  
            // 根据条件合并单元格,例如同一部门合并  
            if (row.department === '技术部') {  
                $(this.datagrid('getPanel')).find('td[field="department"]:eq(' + i + ')')  
                    .attr('rowspan', 2); // 合并两行  
            }  
        }  
    }  
});  

4.3 性能优化与调试

  • 数据分页:通过 pageNumberpageSize 参数控制加载数据量,避免一次性渲染过多数据。
  • 调试技巧:使用浏览器开发者工具的“Elements”面板检查表格结构,或通过 console.log($('#dataGrid').datagrid('options')) 输出配置信息。

五、完整代码示例与效果展示

以下是一个完整的 HTML 文件,整合了上述所有功能:

<!DOCTYPE html>  
<html>  
<head>  
    <title>EasyUI 列组合完整示例</title>  
    <link rel="stylesheet" href="https://www.jeasyui.com/easyui/themes/default/easyui.css">  
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>  
    <script src="https://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>  
    <style>  
        .datagrid-cell-group {  
            background-color: #e0e0e0;  
            font-weight: bold;  
            padding: 5px;  
        }  
    </style>  
</head>  
<body>  
    <button onclick="addGroup()">添加分组</button>  
    <table id="dataGrid"></table>  

    <script>  
    $(function() {  
        $('#dataGrid').datagrid({  
            url: 'data.json',  
            columns: [[  
                {  
                    field: 'personal',  
                    title: '个人信息',  
                    columns: [  
                        {field: 'name', title: '姓名', width: 120},  
                        {field: 'age', title: '年龄', width: 80,  
                            formatter: function(value) {  
                                return value + ' 岁';  
                        }}  
                    ]  
                },  
                {  
                    field: 'work',  
                    title: '工作信息',  
                    columns: [  
                        {field: 'department', title: '部门', width: 150},  
                        {field: 'position', title: '职位', width: 100}  
                    ]  
                }  
            ]],  
            fitColumns: true,  
            onAfterRender: function() {  
                // 单元格合并逻辑...  
            }  
        });  

        function addGroup() {  
            // 动态添加分组的实现...  
        }  
    });  
    </script>  
</body>  
</html>  

六、总结与展望

通过本文的讲解,开发者已掌握了从基础配置到复杂功能扩展的 jQuery EasyUI 数据网格 – 创建列组合 的完整流程。这一功能不仅提升了数据展示的可读性,还通过动态化和格式化能力增强了交互体验。

未来,随着前端技术的演进,数据可视化工具将更加智能化。开发者可结合 React/Vue 等框架,或引入第三方库(如 ECharts)进一步扩展数据网格的功能。但无论技术如何变化,理解底层逻辑、善用现有工具,始终是高效开发的关键。

希望本文能为你的项目提供实用参考,也期待你在实际应用中探索出更多创意!

最新发布