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

相关文章

iptables(7)扩展模块state

简介         前面文章我们已经介绍了一些扩展模块,如iprange、string、time、connlimit、limit,还有扩展匹配条件如--tcp-flags、icmp。这篇文章我们介绍state扩展模块  state          在 iptables 的上下文中,--state 选项并不是直接关联于一个扩展模块,而是与 iptables 的 state 匹配机制相关,特

JavaWeb系列二十: jQuery的DOM操作 下

jQuery的DOM操作 CSS-DOM操作多选框案例页面加载完毕触发方法作业布置jQuery获取选中复选框的值jQuery控制checkbox被选中jQuery控制(全选/全不选/反选)jQuery动态添加删除用户 CSS-DOM操作 获取和设置元素的样式属性: css()获取和设置元素透明度: opacity属性获取和设置元素高度, 宽度: height(), widt

C语言入门系列:探秘二级指针与多级指针的奇妙世界

文章目录 一,指针的回忆杀1,指针的概念2,指针的声明和赋值3,指针的使用3.1 直接给指针变量赋值3.2 通过*运算符读写指针指向的内存3.2.1 读3.2.2 写 二,二级指针详解1,定义2,示例说明3,二级指针与一级指针、普通变量的关系3.1,与一级指针的关系3.2,与普通变量的关系,示例说明 4,二级指针的常见用途5,二级指针扩展到多级指针 小结 C语言的学习之旅中,二级

JavaWeb系列六: 动态WEB开发核心(Servlet) 上

韩老师学生 官网文档为什么会出现Servlet什么是ServletServlet在JavaWeb项目位置Servlet基本使用Servlet开发方式说明快速入门- 手动开发 servlet浏览器请求Servlet UML分析Servlet生命周期GET和POST请求分发处理通过继承HttpServlet开发ServletIDEA配置ServletServlet注意事项和细节 Servlet注

XMG xib中不属于一个类的控件,拖线到指定的类中

1.比如我现在有一个view绑定为GreenView,我们按住control向类里面拖线的方式想要达到目的,显然拖不进去。例图如下 那么我们此时还想要达到目的,就需要自己去GreenView的类内部去写IBo 然后这面连接起来 2.第二,大哥郝良建给做的扩展 可以在.h或者.m中写一个NSObject的属性 然后在xib中对应的位置创建一个NSObject的属性

Avalonia 常用控件二 Menu相关

1、Menu 添加代码如下 <Button HorizontalAlignment="Center" Content="Menu/菜单"><Button.Flyout><MenuFlyout><MenuItem Header="打开"/><MenuItem Header="-"/><MenuItem Header="关闭"/></MenuFlyout></Button.Flyout></B

3_创建Tab控件

1,新建MFC 对话框项目,为对话框添加Tab控件,选中Tab控件,新建控件变量m_tab_ctrl 2,为Tab控件添加tab项 m_tab_ctrl.InsertItem(0, L”000”),参数1,哪个位置;参数2,item的名称 3,为Tab控件添加监听事件, void C测试Dlg::OnTcnSelchangeTab1(NMHDR *pNMHDR, LRESUL

C语言入门系列:初识函数

文章目录 一,C语言函数与数学函数的区别1,回忆杀-初中数学2,C语言中的函数 二, 函数的声明1,函数头1.1,函数名称1.2,返回值类型1.3,参数列表 2,函数体2.1,函数体2.2,return语句 三,main函数四,函数的参数与传递方式1,实参和形参1.1,函数定义(含形参)1.2,函数调用(使用实参) 2,参数传递方式2.1,值传递2.2,引用传递 五,函数原型与预声明1,

django学习入门系列之第三点《案例 小米商城头标》

文章目录 阴影案例 小米商城头标往期回顾 阴影 设置阴影 box-shadow:水平方向 垂直方向 模糊距离 颜色 box-shadow: 5px 5px 5px #aaa; 案例 小米商城头标 目标样式: CSS中的代码 /*使外边距等于0,即让边框与界面贴合*/body{margin: 0;}/*控制父级边框*/.header{backgroun

MyBatis系列之分页插件及问题

概述 无论是C端产品页面,还是后台系统页面,不可能一次性将全部数据加载出来。后台系统一般都是PC端登录,用Table组件(如Ant Design Table)渲染展示数据,可点击列表的下一页(或指定某一页)查看数据。C端产品如App,在下滑时可查看更多数据,看起来像是一次性加载数据,实际上也是分批请求后台系统获取数据。而这,就是分页功能。 如果没有使用Hibernate或MyBatis这样的O