扩展 easyui 控件系列:为datagrid 增加过滤行
此功能还为真正完成,起到抛砖引玉的效果,发动大家的力量把这个功能完善起来,效果图如下:

基本上就是扩展了 datagrid.view 中的onAfterRender 这个事件,具体代码如下:
$.extend($.fn.datagrid.defaults.view,{
onAfterRender:function(target){
var dc = $.data(target,'datagrid').dc;
if(dc.header2.find('[filter="true"]').length == 0){
var header = dc.header1; //固定列表头
var header2 = dc.header2; // 常规列表头
var filterRow = $('<tr></tr>');
var opts = $.data(target,'datagrid').options;
var columns = opts.columns;
var frozenColumns = opts.frozenColumns;
$.each(frozenColumns[0],function(){
if(!this.checkbox){
var w = header.find('[field="'+this.field+'"] > div').width();
filterRow.append('<td><input style="width:'+w+'px"/></td>');
}
else{
header.find('.datagrid-header-check').parent().attr('rowspan',2)
}
});
header.find('tbody').append(filterRow);
filterRow = $('<tr filter="true"></tr>');
$.each(columns[0],function(){
var w = header2.find('[field="'+this.field+'"] > div').width();
if(this.hfilter){
var a = $('<input field="'+this.field+'" class="easyui-combobox" style="width:'+w+'px" />');
filterRow.append($('<td></td>').append(a));
a.data('options',this.hfilter);
}else{
filterRow.append('<td><input style="width:'+w+'px"/></td>');
}
});
header2.find('tbody').append(filterRow);
var dgData = $(target).datagrid('getData').rows;
header2.find('input[field]').each(function(){
var opts = $(this).data('options');
var field = $(this).attr('field');
$.extend(opts.options,{
onSelect:function(item){
var d = _.filter(dgData,function(row){
return row[field].indexOf(item[opts.options.textField]) > -1;
});
$(target).datagrid('loadData',d);
}
});
$(this)[opts.type](opts.options);
})
}
}
});
在定义列时,我们加上个自定义的属性
{ title: '部门名称', field: 'depname', width: 120,hfilter:{type:'combobox',options:{data:roleData,valueField:'KeyId',textField:'RoleName'}} }
红色字体就是自定义的属性,用来定义过滤行中的控件的
在使用的时候,扩展的代码要放到Datagrid 初始化的前边!
示例DEMO 完整代码
<!DOCTYPE html>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="../../jquery-easyui-1.3.3/themes/2013/easyui.css">
<link rel="stylesheet" type="text/css" href="../../jquery-easyui-1.3.3/themes/icon.css">
<link rel="stylesheet" type="text/css" href="../../jquery-easyui-1.3.3/themes/default/lookup.css"> <script type="text/javascript" src="../../jquery-easyui-1.3.3/jquery-1.10.2.min.js"></script>
<script type="text/javascript" src="../../jquery-easyui-1.3.3/jquery-migrate-1.2.1.min.js"></script>
<script type="text/javascript" src="../../jquery-easyui-1.3.3/jquery.easyui.min.js"></script> <script src="../../jquery-easyui-1.3.3/locale/easyui-lang-zh_CN.js"></script>
<script src="../../jquery-easyui-1.3.3/underscore-min.js"></script> </head>
<body> <table id=userlist></table> <script> var userData ={"total":6,"rows":[{"KeyId":1,"UserName":"admin2","Password":"93BCC5699183BED3AD5E3C050ADEF183","PassSalt":"K6FqbXXK","Email":"hxl_apple@163.com","IsAdmin":false,"IsDisabled":false,"TrueName":"疯狂秀才","DepartmentId":4,"Mobile":"","QQ":"","Remark":"","AddTime":null,"MenusJson":null,"ConfigJson":"{\"theme\":{\"title\":\"默认皮肤\",\"name\":\"default\"},\"showType\":\"menubutton\",\"gridRows\":\"40\"}","depname":"生产部","Departments":"4,15"},{"KeyId":9,"UserName":"admin","Password":"7D34608F3723F586DC28FC5D88BCECC6","PassSalt":"ZWvu4jSn","Email":"hxl_apple@163.com","IsAdmin":true,"IsDisabled":false,"TrueName":"疯狂秀才","DepartmentId":3,"Mobile":"18668088525","QQ":"1055818239","Remark":"系统默认帐号,不可删除","AddTime":null,"MenusJson":null,"ConfigJson":"{\"theme\":{\"title\":\"流行灰\",\"name\":\"gray\"},\"showType\":\"Accordion2\",\"gridRows\":\"20\",\"showValidateCode\":false}","depname":"综合办公室","Departments":"3,15"},{"KeyId":10,"UserName":"test","Password":"5C7E95836A99FB74723F54C43511154A","PassSalt":"RGVJejaR","Email":"","IsAdmin":false,"IsDisabled":false,"TrueName":"Test1","DepartmentId":1,"Mobile":"","QQ":"","Remark":"","AddTime":null,"MenusJson":null,"ConfigJson":null,"depname":"幸福集团","Departments":"3,4,15,5"},{"KeyId":12,"UserName":"ddd","Password":"7A3C56FA5A59953C058E7525FA0F754F","PassSalt":"O8RnCnaH","Email":"","IsAdmin":false,"IsDisabled":false,"TrueName":"ddd","DepartmentId":0,"Mobile":"","QQ":"","Remark":"","AddTime":null,"MenusJson":null,"ConfigJson":null,"depname":"","Departments":""},{"KeyId":13,"UserName":"eee","Password":"2FE5DFAE3F8AC41F907FCF8B1C1579D7","PassSalt":"vKbkyBib","Email":"","IsAdmin":false,"IsDisabled":false,"TrueName":"eeee","DepartmentId":3,"Mobile":"","QQ":"","Remark":"","AddTime":null,"MenusJson":null,"ConfigJson":null,"depname":"综合办公室","Departments":""},{"KeyId":15,"UserName":"007","Password":"9E704A8699D72ADA11A7EB7BF07739FA","PassSalt":"bcLJiqHB","Email":"","IsAdmin":false,"IsDisabled":false,"TrueName":"007","DepartmentId":1,"Mobile":"","QQ":"","Remark":"","AddTime":null,"MenusJson":null,"ConfigJson":null,"depname":"幸福集团","Departments":""}]}
var roleData = [{"KeyId":2,"RoleName":"生产部","Sortnum":2,"Remark":"工程师","IsDefault":0,"Navigations":null,"Users":null,"Departments":""},
{"KeyId":3,"RoleName":"幸福集团","Sortnum":1,"Remark":"6666","IsDefault":0,"Navigations":null,"Users":null,
"Departments":"1,3,4,15,5,9,10,11,12,13,14,8"},
{"KeyId":17,"RoleName":"综合办公室","Sortnum":1,"Remark":"","IsDefault":1,"Navigations":null,"Users":null,"Departments":"1,4,15"},{"KeyId":20,"RoleName":"普通用户","Sortnum":3,"Remark":"","IsDefault":0,"Navigations":null,"Users":null,"Departments":"1,3,4,15,5,9,10,11,12,13,14,8"}] $.extend($.fn.datagrid.defaults.view,{
onAfterRender:function(target){
var dc = $.data(target,'datagrid').dc;
if(dc.header2.find('[filter="true"]').length == 0){
var header = dc.header1; //固定列表头
var header2 = dc.header2; // 常规列表头
var filterRow = $('<tr></tr>');
var opts = $.data(target,'datagrid').options;
var columns = opts.columns;
var frozenColumns = opts.frozenColumns; $.each(frozenColumns[0],function(){
if(!this.checkbox){
var w = header.find('[field="'+this.field+'"] > div').width(); filterRow.append('<td><input style="width:'+w+'px"/></td>');
}
else{
header.find('.datagrid-header-check').parent().attr('rowspan',2)
}
});
header.find('tbody').append(filterRow);
filterRow = $('<tr filter="true"></tr>'); $.each(columns[0],function(){
var w = header2.find('[field="'+this.field+'"] > div').width();
if(this.hfilter){
var a = $('<input field="'+this.field+'" class="easyui-combobox" style="width:'+w+'px" />');
filterRow.append($('<td></td>').append(a));
a.data('options',this.hfilter);
}else{
filterRow.append('<td><input style="width:'+w+'px"/></td>');
} }); header2.find('tbody').append(filterRow); var dgData = $(target).datagrid('getData').rows; header2.find('input[field]').each(function(){
var opts = $(this).data('options');
var field = $(this).attr('field');
$.extend(opts.options,{
onSelect:function(item){
var d = _.filter(dgData,function(row){
return row[field].indexOf(item[opts.options.textField]) > -1;
}); $(target).datagrid('loadData',d);
}
}); $(this)[opts.type](opts.options);
})
}
}
}); $(function(){
$('#userlist').datagrid({
toolbar:'#toolbar',
data:userData,
fit:true,
title:'用户列表',
selectOnCheck:false,
checkOnSelect:true,
singleSelect:true,
//tools:[{iconCls:'icon-add'}],
frozenColumns:[[
{checkbox:true},
{ title: 'ID', field: 'KeyId', width: 40, sortable: true },
{ title: '用户名', field: 'UserName', width: 100, sortable: true }
]], columns:[[
{ title: '真实姓名', field: 'TrueName', width: 100, sortable: true },
{ title: '部门名称', field: 'depname', width: 120,hfilter:{type:'combobox',options:{data:roleData,valueField:'KeyId',textField:'RoleName'}} },
{ title: '邮箱', field: 'Email', width: 100, sortable: true },
{
title: '超管',
field: 'IsAdmin',
width: 60,
align: 'center',
formatter: function (v, d, i) {
if (d.UserName == "admin")
return '';
return v ? '√':'x'
}
},
{
title: '状态',
field: 'IsDisabled',
width: 60,
align: 'center',
formatter: function (v, d, i) {
if (d.UserName == "admin")
return '';
return v ? '√':'x'
}
},{title:'描述',field:'Remark',width:160}
]],
pagination: true,
pageSize:20,
rowStyler: function (index, row, css) {
if (row.UserName=="admin") {
return 'font-weight:bold;';
}
} });
}); </script> </body>
</html>
扩展 easyui 控件系列:为datagrid 增加过滤行的更多相关文章
- 扩展GridView控件——为内容项添加拖放及分组功能
引言 相信大家对GridView都不陌生,是非常有用的控件,用于平铺有序的显示多个内容项.打开任何WinRT应用或者是微软合作商的网站,都会在APP中发现GridView的使用.“Tiles”提供了一 ...
- easyui表单多重验证,动态设置easyui控件
要实现的功能:在做添加学生信息的时候,利用easyui的验证功能判断 学号是否重复和学号只能为数字 最终效果如下图: 但在做这个的过程中,遇到了一系列的问题: 扩展validatebox的验证方法,最 ...
- Android自己定义控件系列五:自己定义绚丽水波纹效果
尊重原创!转载请注明出处:http://blog.csdn.net/cyp331203/article/details/41114551 今天我们来利用Android自己定义控件实现一个比較有趣的效果 ...
- 验证控件插图扩展控件ValidatorCalloutExtender(用于扩展验证控件)和TextBoxWatermarkExtender
<asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptMan ...
- Android控件系列之RadioButton&RadioGroup(转)
学习目的: 1.掌握在Android中如何建立RadioGroup和RadioButton 2.掌握RadioGroup的常用属性 3.理解RadioButton和CheckBox的区别 4.掌握Ra ...
- Android控件系列之CheckBox
学习目的: 1.掌握在Android中如何建立CheckBox 2.掌握CheckBox的常用属性 3.掌握CheckBox选中状态变换的事件(监听器) CheckBox简介: CheckBox和Bu ...
- C#控件系列--文本类控件
C#控件系列--文本类控件 文本类控件主要包含Label.LinkLabel.Button.TextBox以及RichTextBox. Label 功能 Label用来 ...
- easyui 控件获取焦点方式
针对easyui控件前端组织的dom做分析,如下: combo/combobox/combogrid类似结构如下: <input class="easyui-datebox dateb ...
- 动态添加easyui 控件
jquery提供了append,appendTo方法,可以动态添加静态的html文本,在easyui中,要动态添加easyui控件要怎么做呢,下面就来介绍动态添加easyui控件. 使用方法:和添加静 ...
随机推荐
- android Gui系统之WMS(1)----window flags & view flags
SurfaceFlinger 前面说的,就是一个surface的合成.SurfaceFlinger就是一个默默的记录着,它不会对surface的内容有什么改动. WMS(WindowsManagerS ...
- php示例代码之empty函数
1 2 3 4 5 6 7 8 9 10 11 <?php $testVar=0; if(empty($testVar)) { echo 'msg:true'; } ...
- yii2 GridView 下拉搜索实现案例教程
作者:白狼 出处:http://www.manks.top/article/yii2_gridview_dropdown_search本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章 ...
- ORACLE中伪表 dual 的用法
dual是一个虚拟表,用来构成select的语法规则,oracle保证dual里面永远只有一条记录.我们可以用它来做很多事情,如下: 1.查看当前用户,可以在 SQL Plus中执行下面语句 sel ...
- python 读写文件
#! -*- encoding:utf-8 -*- import os from config import * from function import GetCsspToken, RegistIn ...
- Windows下使用AutoSSH,并作为服务自启动(不用安装Cygwin)
之前的折腾过Windows下ssh的自动登录,比如这篇Windows下使用Xshell建立反向隧道,但是这个不能无交互的情况下自动连接(比如在连接新主机时),也就很难在服务中使用.解决方法还是得使用命 ...
- Maven基础配置--nexus私服配置
登录nexus私服后台,按照下图1-3的顺序进行添加仓库: 其中步骤3有三种仓库类型(Type)进行选择 1. Hosted Repository:本地仓库,在私服服务器上存放用户自行上传的jar包: ...
- NuGet学习笔记2——使用图形化界面打包自己的类库
NuGet相对于我们最重要的功能是能够搭建自己的NuGet服务器,实现公司内部类库的轻松共享更新.在安装好NuGet扩展后,我们已经能够通过NuGet轻松下载自己需要的类库,下面来说一说如何将自己的项 ...
- 挖一挖C#中那些我们不常用的东西之系列(1)——ToDictionary,ToLookup
这个系列我们看看C#中有哪些我们知道,但是又不知道怎么用,又或者懒得去了解的东西,比如这篇我们要介绍的toDictionary 和ToLookup. 从图中我们看到有四个ToXXX的方法,其中ToAr ...
- IIS7配置PHP图解(转)
IIS7+PHP_5.2.17 于之前安装IIS的时候已经选上了isapi扩展和isapi筛选,这里就不用另外再添加角色服务了,直接开始 先修改php.ini文件.. 把c:\php下的php.ini ...