扩展 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

相关文章

C#实现WinForm控件焦点的获取与失去

《C#实现WinForm控件焦点的获取与失去》在一个数据输入表单中,当用户从一个文本框切换到另一个文本框时,需要准确地判断焦点的转移,以便进行数据验证、提示信息显示等操作,本文将探讨Winform控件... 目录前言获取焦点改变TabIndex属性值调用Focus方法失去焦点总结最后前言在一个数据输入表单

Mybatis拦截器如何实现数据权限过滤

《Mybatis拦截器如何实现数据权限过滤》本文介绍了MyBatis拦截器的使用,通过实现Interceptor接口对SQL进行处理,实现数据权限过滤功能,通过在本地线程变量中存储数据权限相关信息,并... 目录背景基础知识MyBATis 拦截器介绍代码实战总结背景现在的项目负责人去年年底离职,导致前期规

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

pandas数据过滤

Pandas 数据过滤方法 Pandas 提供了多种方法来过滤数据,可以根据不同的条件进行筛选。以下是一些常见的 Pandas 数据过滤方法,结合实例进行讲解,希望能帮你快速理解。 1. 基于条件筛选行 可以使用布尔索引来根据条件过滤行。 import pandas as pd# 创建示例数据data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dav

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打