扩展 easyui 控件系列:为datagrid 增加过滤行

2024-05-16 01:32

本文主要是介绍扩展 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,<span style= "color: #ff0000;" >hfilter:{type: 'combobox' ,options:{data:roleData,valueField: 'KeyId' ,textField: 'RoleName' }}</span> }

红色字体就是自定义的属性,用来定义过滤行中的控件的

在使用的时候,扩展的代码要放到Datagrid 初始化的前边!

 

示例DEMO 完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
<!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 增加过滤行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/993492

相关文章

WinForms中主要控件的详细使用教程

《WinForms中主要控件的详细使用教程》WinForms(WindowsForms)是Microsoft提供的用于构建Windows桌面应用程序的框架,它提供了丰富的控件集合,可以满足各种UI设计... 目录一、基础控件1. Button (按钮)2. Label (标签)3. TextBox (文本框

CentOS7增加Swap空间的两种方法

《CentOS7增加Swap空间的两种方法》当服务器物理内存不足时,增加Swap空间可以作为虚拟内存使用,帮助系统处理内存压力,本文给大家介绍了CentOS7增加Swap空间的两种方法:创建新的Swa... 目录在Centos 7上增加Swap空间的方法方法一:创建新的Swap文件(推荐)方法二:调整Sww

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

java streamfilter list 过滤的实现

《javastreamfilterlist过滤的实现》JavaStreamAPI中的filter方法是过滤List集合中元素的一个强大工具,可以轻松地根据自定义条件筛选出符合要求的元素,本文就来... 目录1. 创建一个示例List2. 使用Stream的filter方法进行过滤3. 自定义过滤条件1. 定

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

Redis如何实现刷票过滤

《Redis如何实现刷票过滤》:本文主要介绍Redis如何实现刷票过滤问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录引言一、概述二、技术选型三、搭建开发环境四、使用Redis存储数据四、使用SpringBoot开发应用五、 实现同一IP每天刷票不得超过次数六