jQuery EasyUI 数据网格 - 转换 HTML 表格为数据网格
jQuery EasyUI 数据网格 - 转换 HTML 表格为数据网格
简介
jQuery EasyUI 是一个基于 jQuery 的用户界面插件库,提供了完整的用户界面组件和易于使用的 API。数据网格是其中一个核心组件,它支持数据的分页、排序、编辑、格式化等功能。本篇技术文档将介绍如何使用 EasyUI 数据网格将 HTML 表格转换为数据网格的方法。
准备工作
在使用 EasyUI 数据网格前,需要引入 jQuery 和 EasyUI 的 JavaScript 和 CSS 文件。可以通过以下方式引入:
<link rel="stylesheet" href="./jquery-easyui-1.9.5/themes/default/easyui.css">
<link rel="stylesheet" href="./jquery-easyui-1.9.5/themes/icon.css">
<script src="./jquery-easyui-1.9.5/jquery.min.js"></script>
<script src="./jquery-easyui-1.9.5/jquery.easyui.min.js"></script>
HTML 表格转换为数据网格
通过将 HTML 表格转换为数据网格,可以方便地实现数据的分页、排序、编辑、格式化等功能。转换方法如下:
<table id="dg" toolbar="#toolbar">
<thead>
<tr>
<th field="itemid">Item ID</th>
<th field="productid">Product ID</th>
<th field="listprice">List Price</th>
<th field="unitcost">Unit Cost</th>
</tr>
</thead>
<tbody>
<tr>
<td>FI-SW-01</td>
<td>FI-SW-01</td>
<td>$10.00</td>
<td>$5.00</td>
</tr>
<tr>
...
</tr>
</tbody>
</table>
在表格中,需要给每一列指定一个 field
属性,用于表明该列对应数据中的哪个字段。EasyUI 数据网格会根据这些属性将表格中的数据转换为一个 JavaScript 数组。除此之外,还需要指定一个 id
属性用于向 JavaScript 代码中标识该数据网格,一个 toolbar
属性用于指定工具栏的位置。在该表格的下方,可以通过以下方式定义一个工具栏:
<div id="toolbar">
<a href="#" class="easyui-linkbutton" iconCls="icon-add">Add</a>
<a href="#" class="easyui-linkbutton" iconCls="icon-edit">Edit</a>
<a href="#" class="easyui-linkbutton" iconCls="icon-remove">Remove</a>
</div>
这里定义了三个按钮 “Add”, “Edit” 和 “Remove”,每个按钮都有一个对应的图标。通过设置按钮的 href
属性为 “#” 并添加相应的样式,即可创建 EasyUI 中的按钮。
最后,在页面加载时,需要通过 JavaScript 代码将该表格转换为数据网格:
$(function(){
$('#dg').datagrid();
});
通过 $().datagrid()
方法,可以将指定的表格转换为 EasyUI 数据网格。可以通过该方法传入一些配置项来定制数据网格的显示和功能。
实例
以下是一个完整的 HTML 文件,演示了如何通过 EasyUI 数据网格将 HTML 表格转换为数据网格,并添加分页、排序、编辑、格式化等功能。该数据网格支持数据的增、删、改、查等操作。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery EasyUI 数据网格 - HTML 表格转换为数据网格</title>
<link rel="stylesheet" href="./jquery-easyui-1.9.5/themes/default/easyui.css">
<link rel="stylesheet" href="./jquery-easyui-1.9.5/themes/icon.css">
<script src="./jquery-easyui-1.9.5/jquery.min.js"></script>
<script src="./jquery-easyui-1.9.5/jquery.easyui.min.js"></script>
</head>
<body>
<table id="dg" toolbar="#toolbar" pagination="true"
rownumbers="true" fitColumns="true"
singleSelect="true" url="./data.json">
<thead>
<tr>
<th field="id" width="50">ID</th>
<th field="name" width="100">Name</th>
<th field="price" width="50" align="right">Price</th>
<th field="description" width="200">Description</th>
</tr>
</thead>
</table>
<div id="toolbar">
<a href="#" class="easyui-linkbutton" iconCls="icon-add" plain="true"
onclick="addProduct()">Add Product</a>
<a href="#" class="easyui-linkbutton" iconCls="icon-edit" plain="true"
onclick="editProduct()">Edit Product</a>
<a href="#" class="easyui-linkbutton" iconCls="icon-remove" plain="true"
onclick="removeProduct()">Remove Product</a>
</div>
<div id="dlg" class="easyui-dialog" style="width:400px"
closed="true" buttons="#dlg-buttons">
<form id="fm" method="post">
<div class="fitem">
<label for="name">Name:</label>
<input type="text" id="name" name="name" class="easyui-validatebox"
required="true" validType="length[1,20]">
</div>
<div class="fitem">
<label for="price">Price:</label>
<input type="text" id="price" name="price"
class="easyui-numberbox" required="true">
</div>
<div class="fitem">
<label for="description">Description:</label>
<input type="text" id="description" name="description"
class="easyui-validatebox" validType="length[0,100]">
</div>
</form>
</div>
<div id="dlg-buttons">
<a href="#" class="easyui-linkbutton" iconCls="icon-ok"
onclick="saveProduct()">Save</a>
<a href="#" class="easyui-linkbutton" iconCls="icon-cancel"
onclick="$('#dlg').dialog('close')">Cancel</a>
</div>
<script>
var url;
function addProduct(){
$('#dlg').dialog('open').dialog('setTitle','Add Product');
$('#fm').form('clear');
url = './save_product.php';
}
function editProduct(){
var row = $('#dg').datagrid('getSelected');
if (row){
$('#dlg').dialog('open').dialog('setTitle','Edit Product');
$('#fm').form('load',row);
url = './update_product.php?id='+row.id;
}
}
function removeProduct(){
var row = $('#dg').datagrid('getSelected');
if (row){
$.messager.confirm('Confirm','Are you sure you want to remove this product?',function(r){
if (r){
$.post('./remove_product.php',{id:row.id},function(result){
if (result.success){
$('#dg').datagrid('reload'); // reload the data
} else {
$.messager.show({ // show error message
title: 'Error',
msg: result.errorMsg
});
}
},'json');
}
});
}
}
function saveProduct(){
$('#fm').form('submit',{
url: url,
onSubmit: function(){
return $(this).form('validate');
},
success: function(result){
var result = eval('('+result+')');
if (result.success){
$('#dlg').dialog('close'); // close the dialog
$('#dg').datagrid('reload'); // reload the data
} else {
$.messager.show({
title: 'Error',
msg: result.errorMsg
});
}
}
});
}
$(function(){
$('#dg').datagrid({
onLoadSuccess: function(data){
$('.datagrid-row').each(function(index){
$(this).attr('title', data.rows[index].description);
});
}
});
});
</script>
</body>
</html>
总结
使用 EasyUI 数据网格将 HTML 表格转换为数据网格可以为数据处理提供很多方便的选项,同时定制化的配置项也可以满足开发人员的需求。但需要注意的是,EasyUI 数据网格基于 jQuery 和 EasyUI 插件开发,使用前需要对这些技术有一定的了解。