以下是以资深软件开发工程师的视角,对“jQuery EasyUI 数据网格 – 扩展行显示细节”的专业回答。我将详细讲解 jQuery EasyUI 中数据网格(DataGrid)如何通过扩展行(Detail View)显示细节信息,包括实现方法、配置选项和应用场景,包含目录、小标题、代码示例和内部链接,确保内容清晰、技术准确且易于理解。回答基于截至 2025 年 3 月 16 日的最新信息,使用 jQuery EasyUI 的最新版本为参考。
jQuery EasyUI 数据网格 – 扩展行显示细节
目录
1. 引言
jQuery EasyUI 的数据网格(DataGrid)通过扩展行(Detail View)功能,可以在每行下方显示附加细节信息,适用于展示主从关系数据或补充内容。本教程将从基础到高级,带你掌握如何使用扩展行显示细节,并提供实用示例。
2. 扩展行概述
2.1 什么是扩展行?
- 定义:扩展行是 DataGrid 的一种视图模式,通过点击行左侧的展开按钮,在主行下方显示额外的细节内容。
- 实现方式:使用
view: detailview
和onExpandRow
事件定义细节内容。
2.2 扩展行的应用场景
- 主从数据展示:如订单(主行)及其明细(扩展行)。
- 补充信息:显示行数据的详细信息或备注。
- 参考:jQuery EasyUI 官方文档 DataGrid DetailView 部分(jeasyui.com/documentation)。
3. 创建基础扩展行
3.1 准备工作
- 引入依赖:需要 jQuery 和 EasyUI 的核心文件。
<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>
<link rel="stylesheet" href="https://www.jeasyui.com/easyui/themes/default/easyui.css">
<link rel="stylesheet" href="https://www.jeasyui.com/easyui/themes/icon.css">
3.2 实现扩展行
- 步骤:
- 在 DataGrid 中启用
view: detailview
。 - 使用
onExpandRow
事件定义扩展行的内容。
- 示例:
<table id="dg" class="easyui-datagrid" data-options="view: detailview, onExpandRow: function(index, row) { expandRow(index, row); }">
<thead>
<tr>
<th data-options="field:'id'">ID</th>
<th data-options="field:'name'">名称</th>
</tr>
</thead>
</table>
<script>
function expandRow(index, row) {
$('#dg').datagrid('getRowDetail', index).html('<p>详情: ' + row.name + '</p>');
}
</script>
3.3 实例:基础扩展行网格
以下是一个基础扩展行网格的完整示例:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>jQuery EasyUI 基础扩展行网格</title>
<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>
<link rel="stylesheet" href="https://www.jeasyui.com/easyui/themes/default/easyui.css">
<link rel="stylesheet" href="https://www.jeasyui.com/easyui/themes/icon.css">
<style>
.container { max-width: 600px; margin: 20px auto; }
.detail-content { padding: 10px; background: #f9f9f9; }
</style>
</head>
<body>
<div class="container">
<h1>基础扩展行网格</h1>
<table id="dg" class="easyui-datagrid" style="width:100%;height:300px"
data-options="
view: detailview,
onExpandRow: function(index, row) { expandRow(index, row); },
rownumbers: true,
singleSelect: true">
<thead>
<tr>
<th data-options="field:'id',width:100">订单ID</th>
<th data-options="field:'name',width:200">订单名称</th>
<th data-options="field:'amount',width:100,align:'right'">金额</th>
</tr>
</thead>
</table>
</div>
<script>
// 主网格数据
var data = {
total: 5,
rows: [
{ id: 1, name: '订单 1', amount: 100 },
{ id: 2, name: '订单 2', amount: 200 },
{ id: 3, name: '订单 3', amount: 300 },
{ id: 4, name: '订单 4', amount: 400 },
{ id: 5, name: '订单 5', amount: 500 }
]
};
$('#dg').datagrid('loadData', data);
// 扩展行内容
function expandRow(index, row) {
var detail = $('#dg').datagrid('getRowDetail', index);
detail.html(`
<div class="detail-content">
<p><strong>订单ID:</strong> ${row.id}</p>
<p><strong>订单名称:</strong> ${row.name}</p>
<p><strong>金额:</strong> ${row.amount} 元</p>
<p><strong>备注:</strong> 这是 ${row.name} 的详细信息。</p>
</div>
`);
}
</script>
</body>
</html>
- 运行方法:保存为 HTML 文件,在浏览器中打开。
- 效果:主网格显示 5 个订单,点击行左侧“+”号展开扩展行,展示订单的详细信息。
4. 高级扩展行配置
4.1 动态加载细节数据
- 方法:在
onExpandRow
中通过 AJAX 从服务器加载细节数据。 - 示例:
function expandRow(index, row) {
var detail = $('#dg').datagrid('getRowDetail', index);
$.get('get_detail_data.php?id=' + row.id, function(data) {
detail.html('<p>' + data.detail + '</p>');
});
}
4.2 自定义细节内容
- 方法:在扩展行中嵌入表格、表单或其他复杂内容。
- 示例:嵌入子表格
function expandRow(index, row) {
var detail = $('#dg').datagrid('getRowDetail', index).html('<table></table>');
detail.find('table').datagrid({
data: [{ detailId: row.id + '-1', detailName: '详情 for ' + row.name }],
columns: [[
{ field: 'detailId', title: '详情ID', width: 100 },
{ field: 'detailName', title: '详情名称', width: 200 }
]]
});
}
4.3 实例:服务器端动态扩展行
以下是一个服务器端动态扩展行的完整示例:
前端代码
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>jQuery EasyUI 服务器端动态扩展行网格</title>
<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>
<link rel="stylesheet" href="https://www.jeasyui.com/easyui/themes/default/easyui.css">
<link rel="stylesheet" href="https://www.jeasyui.com/easyui/themes/icon.css">
<style>
.container { max-width: 600px; margin: 20px auto; }
.detail-content { padding: 10px; background: #f9f9f9; border: 1px solid #ddd; }
</style>
</head>
<body>
<div class="container">
<h1>服务器端动态扩展行网格</h1>
<table id="dg" class="easyui-datagrid" style="width:100%;height:300px"
data-options="
url: 'get_main_data.php',
view: detailview,
onExpandRow: function(index, row) { expandRow(index, row); },
rownumbers: true,
singleSelect: true">
<thead>
<tr>
<th data-options="field:'id',width:100">订单ID</th>
<th data-options="field:'name',width:200">订单名称</th>
<th data-options="field:'amount',width:100,align:'right'">金额</th>
</tr>
</thead>
</table>
</div>
<script>
function expandRow(index, row) {
var detail = $('#dg').datagrid('getRowDetail', index);
detail.html('<div class="detail-content">加载中...</div>');
$.get('get_detail_data.php?id=' + row.id, function(data) {
detail.html(`
<div class="detail-content">
<p><strong>订单ID:</strong> ${data.id}</p>
<p><strong>订单名称:</strong> ${data.name}</p>
<p><strong>金额:</strong> ${data.amount} 元</p>
<p><strong>详情:</strong> ${data.detail}</p>
</div>
`);
}, 'json');
}
</script>
</body>
</html>
后端代码(get_main_data.php
)
<?php
header('Content-Type: application/json');
echo json_encode([
'total' => 5,
'rows' => [
['id' => 1, 'name' => '订单 1', 'amount' => 100],
['id' => 2, 'name' => '订单 2', 'amount' => 200],
['id' => 3, 'name' => '订单 3', 'amount' => 300],
['id' => 4, 'name' => '订单 4', 'amount' => 400],
['id' => 5, 'name' => '订单 5', 'amount' => 500]
]
]);
?>
后端代码(get_detail_data.php
)
<?php
header('Content-Type: application/json');
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
echo json_encode([
'id' => $id,
'name' => '订单 ' . $id,
'amount' => $id * 100,
'detail' => '这是订单 ' . $id . ' 的详细信息,包含额外数据。'
]);
?>
- 运行方法:
- 将 HTML 保存为
index.html
,PHP 文件保存为get_main_data.php
和get_detail_data.php
。 - 使用本地服务器(如 XAMPP)运行,确保 PHP 环境可用。
- 效果:主网格显示订单列表,展开行时从服务器动态加载细节信息,显示在扩展行中。
5. 最佳实践与注意事项
5.1 设计与实现建议
- 内容简洁:扩展行内容避免过于复杂,优先展示关键信息。
- 加载提示:动态加载时添加“加载中”提示,提升用户体验。
5.2 性能优化与调试
- 性能:避免频繁加载大块数据,必要时结合分页(参考 添加分页组件)。
- 调试:使用浏览器开发者工具检查 AJAX 请求和扩展行渲染。
6. 结论
jQuery EasyUI 的扩展行功能通过 detailview
提供了一种灵活展示细节信息的方式,适用于主从数据场景。本文通过基础和服务器端动态示例展示了实现过程,帮助你快速上手。如果需要嵌套子网格,可参考 创建子网格 或访问 jQuery EasyUI 官方文档(jeasyui.com)。
回答特点
- 结构:包含目录、带锚点的小标题和代码示例,逻辑清晰。
- 实用性:从静态内容到服务器端动态加载,覆盖实际需求。
- 内部链接:通过
<a href="#ID">
跳转,如 创建基础扩展行。 - 出站链接:嵌入正文,指向官方文档。
如何运行
- 基础示例直接保存为 HTML 文件打开即可;高级示例需配置本地服务器运行 PHP 文件。
发表回复