Jquery之datagrid查询详解
1. 简介
jQuery EasyUI Datagrid是一个灵活的、易于使用的数据表格控件。它具有分页、排序、过滤、选中、编辑和行内添加/编辑/删除等功能。本文将详细讲解jQuery EasyUI Datagrid的查询功能。
2. 数据源
在jQuery EasyUI Datagrid中,可以通过设置其"Toolbar"属性来添加查询条件组件。主要有三部分组成:输入框、下拉框和按钮。然后通过Jquery的Ajax方法向服务端发送请求,获得相应的数据,最后将返回的数据展示在datagrid中。
以下是一个数据源示例:
$(function(){
$('#datagrid').datagrid({
url:'/demo',
toolbar:'#toolbar',
pagination:true,
pageSize:20,
pageList:[20,30,50],
singleSelect:true,
fit:true,
columns:[[...]]
});
});
其中:
-
url:表示向服务端发起请求的地址;
-
toolbar:表示datagrid的顶部工具栏,即查询条件组件;
-
pagination: 是否启用分页功能;
-
pageSize:表示每页显示的记录数;
-
pageList:表示每页可以选择的记录数;
-
singleSelect:表示是否单选;
-
fit:表示datagrid的整体宽高是否自适应父容器;
-
columns:表示datagrid的列描述信息;
-
...
3. 查询操作
3.1 普通查询
普通查询即针对一个或多个条件进行查询,查询结果以datagrid的形式展示出来。
首先,我们需要在HTML页面中添加相应的查询条件组件:
<div id="toolbar">
<form>
<input id="name" class="easyui-textbox" label="用户名:" labelPosition="left"/>
<input id="state" class="easyui-combobox" label="状态:" labelPosition="left"
data-options="valueField:'value',textField:'text',panelHeight:'auto',data:[{value:'0',text:'关闭'},{value:'1',text:'运行'}]"/>
<a href="#" class="easyui-linkbutton" iconCls="icon-search" onclick="datagridSearch()">查询</a>
</form>
</div>
其中,easyui-textbox
表示EasyUI的输入框,easyui-combobox
表示EasyUI的下拉框,easyui-linkbutton
表示EasyUI的按钮。
其次,我们需要编写相应的查询函数:
function datagridSearch(){
var queryParams = $('#datagrid').datagrid('options').queryParams;
var name = $('#name').textbox('getValue');
var state = $('#state').combobox('getValue');
$.extend(queryParams,{name:name,state:state});
$('#datagrid').datagrid('reload');
}
其中,datagrid
表示datagrid的ID,options.queryParams
表示查询参数,textbox('getValue')
表示获取输入框中的值,combobox('getValue')
表示获取下拉框中的值,$.extend
表示将新的查询条件合并到原有的查询参数中,datagrid('reload')
表示重新加载datagrid。
最后,我们需要在服务端编写相应的查询接口,根据传入的查询条件参数进行相应的数据库查询并返回结果。
以下是一个Python Flask框架下的示例:
from flask import request
from flask import jsonify
@app.route('/demo')
def demo():
page = request.args.get('page', 1, type=int)
rows = request.args.get('rows', 10, type=int)
name = request.args.get('name', '')
state = request.args.get('state', '')
# 执行数据库查询
results = db.session.query(User).filter(User.name.like('%' + name + '%'))
if state != '':
results = results.filter(User.state == int(state))
else:
results = results.filter(User.state.in_([0, 1]))
total = results.count()
results = results.offset((page-1)*rows).limit(rows)
data = []
for r in results:
data.append(r.to_dict())
return jsonify({'total':total,'rows':data})
其中,request.args.get()
表示获取相应的查询参数,db.session.query()
表示执行SQL查询,like()
表示模糊查询,filter()
表示过滤条件,count()
表示计算总共符合条件的记录数,offset()
和limit()
表示分页,to_dict()
表示将结果转换成字典格式,最后通过jsonify
函数返回查询结果。
3.2 高级查询
高级查询即针对多个条件进行组合查询,查询结果以datagrid的形式展示出来。
首先,我们需要在HTML页面中添加相应的高级查询条件组件:
<div id="searchDialog" class="easyui-dialog" closed="true" buttons="#searchButtons" title="高级查询" style="width:400px;height:auto;">
<form id="searchForm">
<table>
<tr>
<td>用户名:</td>
<td><input id="s_name" class="easyui-textbox" data-options="width:180px"></td>
</tr>
<tr>
<td>状态:</td>
<td>
<select id="s_state" class="easyui-combobox" data-options="valueField:'value',textField:'text',panelHeight:'auto',data:[{value:'',text:'全部'},{value:'0',text:'关闭'},{value:'1',text:'运行'}]"></select>
</td>
</tr>
</table>
</form>
</div>
其中,easyui-dialog
表示EasyUI的对话框,easyui-textbox
和easyui-combobox
表示EasyUI的输入框和下拉框。
其次,我们需要编写相应的高级查询函数:
function datagridAdvancedSearch(){
$('#searchDialog').dialog('open');
}
function searchOK(){
var queryParams = $('#datagrid').datagrid('options').queryParams;
var name = $('#s_name').textbox('getValue');
var state = $('#s_state').combobox('getValue');
$.extend(queryParams,{name:name,state:state});
$('#datagrid').datagrid('reload');
$('#searchDialog').dialog('close');
}
function searchCancel(){
$('#searchDialog').dialog('close');
}
其中,datagridAdvancedSearch()
表示打开高级查询对话框,searchOK()
表示提交查询条件并关闭对话框,searchCancel()
表示取消查询并关闭对话框。
最后,我们需要在服务端编写相应的高级查询接口,根据传入的查询条件参数进行相应的数据库查询并返回结果。与普通查询类似,只是多了一些查询条件的组合。
以下是一个Python Flask框架下的示例:
@app.route('/demo/advancedsearch')
def demo_advancedsearch():
page = request.args.get('page', 1, type=int)
rows = request.args.get('rows', 10, type=int)
name = request.args.get('name', '')
state = request.args.get('state', '')
# 执行数据库查询
results = db.session.query(User).filter(User.name.like('%' + name + '%'))
if state != '':
results = results.filter(User.state == int(state))
else:
results = results.filter(User.state.in_([0, 1]))
total = results.count()
results = results.offset((page-1)*rows).limit(rows)
data = []
for r in results:
data.append(r.to_dict())
return jsonify({'total':total,'rows':data})
4. 示例
以下是两个完整的示例,分别是普通查询和高级查询。
4.1 普通查询示例
<!DOCTYPE html>
<html>
<head>
<title>普通查询</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="/static/css/easyui.css">
<link rel="stylesheet" type="text/css" href="/static/css/icon.css">
<script type="text/javascript" src="/static/js/jquery.min.js"></script>
<script type="text/javascript" src="/static/js/jquery.easyui.min.js"></script>
</head>
<body>
<div id="tbar">
<form>
<input id="name" class="easyui-textbox" label="用户名:" labelPosition="left"/>
<input id="state" class="easyui-combobox" label="状态:" labelPosition="left"
data-options="valueField:'value',textField:'text',panelHeight:'auto',data:[{value:'',text:'全部'},{value:'0',text:'关闭'},{value:'1',text:'运行'}]"/>
<a href="#" class="easyui-linkbutton" iconCls="icon-search" onclick="datagridSearch()">查询</a>
</form>
</div>
<table id="datagrid" style="width:100%;"></table>
<script type="text/javascript">
$(function(){
$('#datagrid').datagrid({
url:'/demo',
toolbar:'#tbar',
pagination:true,
pageSize:20,
pageList:[20,30,50],
singleSelect:true,
fit:true,
columns:[[...]]
});
});
function datagridSearch(){
var queryParams = $('#datagrid').datagrid('options').queryParams;
var name = $('#name').textbox('getValue');
var state = $('#state').combobox('getValue');
$.extend(queryParams,{name:name,state:state});
$('#datagrid').datagrid('reload');
}
</script>
</body>
</html>
4.2 高级查询示例
<!DOCTYPE html>
<html>
<head>
<title>高级查询</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="/static/css/easyui.css">
<link rel="stylesheet" type="text/css" href="/static/css/icon.css">
<script type="text/javascript" src="/static/js/jquery.min.js"></script>
<script type="text/javascript" src="/static/js/jquery.easyui.min.js"></script>
</head>
<body>
<div id="tbar">
<a href="#" class="easyui-linkbutton" iconCls="icon-search" onclick="datagridAdvancedSearch()">高级查询</a>
</div>
<table id="datagrid" style="width:100%;"></table>
<div id="searchDialog" class="easyui-dialog" closed="true" buttons="#searchButtons" title="高级查询" style="width:400px;height:auto;">
<form id="searchForm">
<table>
<tr>
<td>用户名:</td>
<td><input id="s_name" class="easyui-textbox" data-options="width:180px"></td>
</tr>
<tr>
<td>状态:</td>
<td>
<select id="s_state" class="easyui-combobox" data-options="valueField:'value',textField:'text',panelHeight:'auto',data:[{value:'',text:'全部'},{value:'0',text:'关闭'},{value:'1',text:'运行'}]"></select>
</td>
</tr>
</table>
</form>
</div>
<div id="searchButtons">
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-search'" onclick="searchOK()">查询</a>
<a href="#" class="easyui-linkbutton" data-options="iconCls:'icon-cancel'" onclick="searchCancel()">取消</a>
</div>
<script type="text/javascript">
$(function(){
$('#datagrid').datagrid({
url:'/demo/advancedsearch',
pagination:true,
pageSize:20,
pageList:[20,30,50],
singleSelect:true,
fit:true,
columns:[[...]]
});
});
function datagridAdvancedSearch(){
$('#searchDialog').dialog('open');
}
function searchOK(){
var queryParams = $('#datagrid').datagrid('options').queryParams;
var name = $('#s_name').textbox('getValue');
var state = $('#s_state').combobox('getValue');
$.extend(queryParams,{name:name,state:state});
$('#datagrid').datagrid('reload');
$('#searchDialog').dialog('close');
}
function searchCancel(){
$('#searchDialog').dialog('close');
}
</script>
</body>
</html>
5. 总结
本文详细讲解了jQuery EasyUI Datagrid的查询功能,包括普通查询和高级查询。同时,提供了两个示例供大家参考。
在实际项目中,查询功能是必不可少的,通过本文的讲解,相信大家对jQuery EasyUI Datagrid的查询功能有了更加深入的了解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Jquery之datagrid查询详解 - Python技术站