Datatables表格控件的使用相关网站及遇到的问题

1.官网教程链接:http://www.datatables.net/



2.基础使用可参考他人博客链接:http://blog.csdn.net/mickey_miki/article/details/8240477,这个网址上的信息很全。



3.自己碰到的问题(本人后台使用Java开发):

Question1:datatables 可以实现实时搜索数据列表,可如何将参数传入后台?(请查看思路和代码)
                              (1)设置searching: true,

(2)获取搜索输入框的value值,在ajax的data属性传入参数,并注意前后台配置的参数名必须保持一致

(3)如果传入后台的数据为乱码,需先进行转码处理。

思路图:

Question2:     下拉框页长为ALL时,后台处理数据的方法?

后台主要获取的三个参数: draw是请求的序号,start是数据的偏移量,length是需要返回的最大数据条数;当length = -1时,程序直接执行查询全部用户,不执行带有分页器的代码。

前端页面的参数:draw: 表示请求次数,recordsTotal: 总记录数,recordsFiltered: 过滤后的总记录数,data: 具体的数据对象数组

Question3:    Datatables列排序,后台传递的参数是什么?

order[0][column]: 二维表格,而只有一维需要排序,是第一行列名的位置;所以 order 的下标为0. 该属性表示第几列需要排序。

order[0][dir]: 排序方式 ASC | DESC

前台:设置"ordering" : true,

后台的获取代码如下:(不需要像length、start等参数通过在方法中传递)



4.个人使用的基本属性

  • “columns":[{"data": "functionurl"},{},{}]    注:初始化列,该属性为对象数组,不需要定义的列也需要用null进行占位,functionurl字段是与数据库的字段一致
  • “columnsDefs”:[{"render":funtion(){}, "targets":4}]  注:和columns相似,但可用targets灵活指定列, render是通过函数根据个人需求随意改变内容值。

Example One:将修改、删除按钮放在列中显示

"columnDefs" : [
		{
			"orderable": false,
			"render" : function(data, type, row) {
				var buttons = ‘‘;
				buttons +="<a href=‘javascript:void(0);‘ onClick=\"handle_ed(‘" + row.id + "‘)\" ><i class=‘Hui-iconfont‘></i><i class=‘im-pencil2‘></i></a>";
				buttons +=" <a href=‘javascript:void(0);‘  onClick=\"function_del(‘one‘,‘" + row.id + "‘)\" ><i class=‘Hui-iconfont‘></i></a>";
				return buttons;
			},
			"targets" : 4,
		}
]

 效果图:

Example Two:  数据库的字段数据为1或者2,而页面根据判断显示是或者否 

"render": function(data, type, row) {
			 var flag = ‘‘;
			 if( row.systemflag == 1){
					 flag = "是";
			 }
                        if( row.systemflag == 2){
					 flag = "否";
			 }

			 return flag;
 },

方法中参数含义: data: 当前单元格的数据;type: 当前列的类型;row: 当前行完整的数据对象;meta: 为一个子对象,包含3个属性;

row: 当前行的索引; col: 当前列的索引; settings: 当前DataTables控件的settings对象

  • 刷新页面:table.fnDraw();  网上资料有的人都写table.draw(),但是在我这里会产生提示错误table.draw() is not a function, 查看源码时,可以这样用 table.api().search($(this).val()).draw();   //Here table is instance of datatable.


5.不规范书写造成错误范例

错误提示原因可能是逗号缺少,列的属性不一致,指定列的下标错误(本来有五列,确指定第六列)



6.扩展工具(列显示/隐藏、Excel、Print)

(1)列显示/隐藏

页面引入:CSS  <!-- columns show and hide css style -->

<link href="../../static/datatables/css/buttons/buttons.dataTables.min.css" rel="stylesheet" type="text/css" />
<link href="../../static/datatables/css/admin/jquery.dataTables.css" rel="stylesheet" type="text/css" />

JS    <!-- buttons hide and show -->

  //此处的JS文件一定要放在名为1.10.8的文件夹下,否则会提示错误:这个可能需要1.10.8或者更高版本。

<script type="text/javascript" src="lib/datatables/1.10.8/jquery.dataTables.js"></script>

<script type="text/javascript" src="../../static/datatables/js/buttons/dataTables.buttons.min.js"></script>

<script type="text/javascript" src="../../static/datatables/js/buttons/buttons.colVis.min.js"></script>

配置dom节点:  "dom" : ‘Blfrtip‘,

   配置buttons属性:

"buttons": [ {
     extend: ‘colvis‘,
     text: ‘列段显示/隐藏‘
     },

]

(2)Excel

页面引入:<!-- excel export data-->

<script type="text/javascript" src="lib/datatables/js/excel/buttons.flash.min.js"></script>   //此文件导出可以兼容IE9以上

/*如果是支持HTML5的则可以引入文件*/

<script type="text/javascript" src="lib/datatables/js/excel/jszip.min.js"></script>
<script type="text/javascript" src="lib/datatables/js/excel/buttons.html5.min.js"></script>

   配置buttons属性:

"buttons": [ {
     extend: ‘colvis‘,
     text: ‘列段显示/隐藏‘
     },{

extend: ‘excel‘
//extend: ‘excelHtml5‘    //支持html5导出设置

     },

]

(3)Print

页面引入:<script type="text/javascript" src="../../static/bj/js/buttons/buttons.print.min.js"></script>

配置buttons属性:

"buttons": [ {
     extend: ‘colvis‘,
     text: ‘列段显示/隐藏‘
     },{

  extend: ‘excel‘
  //extend: ‘excelHtml5‘    //支持html5导出设置

    },{

  extend: ‘print‘,
  text: ‘打印‘,
  exportOptions: {
  //columns: ‘:visible‘
  }
 },

]

(4)列拖拽与列宽拖动

页面引入:     <!-- column moving script -->

<script type="text/javascript" src="lib/datatables/js/ColReorder/colResizable-1.5.min.js"></script>
<script type="text/javascript" src="lib/datatables/js/ColReorder/dataTables.colReorder.js"></script>

配置:/*在datatables()方法声明之外插入下面代码*/

//columns moving
new $.fn.dataTable.ColReorder( table, {
// options
} );
//使用col插件实现表格头宽度拖拽
$(".table").colResizable();



 7.下面是实现的整体代码

前台代码:

  1 <%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
  2 <!DOCTYPE HTML>
  3 <html>
  4 <head>
  5 <meta charset="utf-8">
  6 <meta name="renderer" content="webkit|ie-comp|ie-stand">
  7 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  8 <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
  9 <meta http-equiv="Cache-Control" content="no-siteapp" />
 10 <LINK rel="Bookmark" href="/favicon.ico" >
 11 <LINK rel="Shortcut Icon" href="/favicon.ico" />
 12
 13 <!-- columns show and hide css style -->
 14 <link href="../../static/datatables/css/buttons/buttons.dataTables.min.css" rel="stylesheet" type="text/css" />
 15 <link href="../../static/datatables/css/admin/jquery.dataTables.css" rel="stylesheet" type="text/css" />
 16
 17 <link rel="stylesheet" type="text/css" href="../../static/h-ui/css/H-ui.min.css" />
 18 <link rel="stylesheet" type="text/css" href="../../static/h-ui.admin/css/H-ui.admin.css" />
 19 <link rel="stylesheet" type="text/css" href="../../static/Hui-iconfont/1.0.7/iconfont.css" />
 20 <link rel="stylesheet" type="text/css" href="../../static/icheck/icheck.css" />
 21  <link rel="stylesheet" type="text/css" href="../../static/h-ui.admin/skin/default/skin.css" id="skin" />
 22 <link rel="stylesheet" type="text/css" href="../../static/h-ui.admin/css/style.css" />
 23
 24 <title>用户管理</title>
 25 </head>
 26 <body>
 27 <nav class="breadcrumb"><i class="Hui-iconfont"></i> 首页 <span class="c-gray en">&gt;</span> 用户中心 <span class="c-gray en">&gt;</span> 用户管理
 28 <a class="btn btn-success radius r mr-20" style="line-height:1.6em;margin-top:3px" href="javascript:void(0);" onclick="reloadTable()" title="刷新" ><i class="Hui-iconfont"></i></a></nav>
 29 <div class="pd-20">
 30     <div class="text-c">
 31                            <select  class="input-text"  style="width:150px;height:30px" id="btnSelected">
 32                           <option value="1">菜单名称</option>
 33                        </select>
 34                       &nbsp;&nbsp;
 35         <input type="text" class="input-text" style="width:250px" placeholder="输入关键字"  id="keysearch" name="">
 36         <button type="submit" class="btn btn-success radius" id="btnSearch" name=""><i class="Hui-iconfont"></i> 查询</button>
 37     </div>
 38     <div class="cl pd-5 bg-1 bk-gray mt-20">
 39     <span class="l">
 40         <a href="javascript:void(0);" onclick="delall()"  class="btn btn-danger radius"><i class="Hui-iconfont"></i> 批量删除</a>
 41         <a href="javascript:void(0);" onclick="handle_add()" class="btn btn-primary radius"><i class="Hui-iconfont"></i> 添加功能</a>
 42     </span>
 43  </div>
 44     <div class="mt-20">
 45     <table class="table table-border table-bordered table-hover table-bg table-sort">
 46         <thead>
 47             <tr class="text-c">
 48                     <th ><input type="checkbox" id="checkbox">全选/反选</th>
 49                     <th>菜单名称</th>
 50                     <th>菜单地址</th>
 51                     <th>是否是系统菜单</th>
 52                     <th>操作</th>
 53             </tr>
 54         </thead>
 55
 56     </table>
 57     </div>
 58 </div>
 59
 60 <script type="text/javascript" src="../../static/jquery/1.9.1/jquery.min.js"></script>
 61 <script type="text/javascript" src="../../static/layer/2.1/layer.js"></script>
 62 <script type="text/javascript" src="../../static/laypage/1.2/laypage.js"></script>
 63 <script type="text/javascript" src="../../static/My97DatePicker/WdatePicker.js"></script>
 64 <script type="text/javascript" src="../../static/h-ui/js/H-ui.js"></script>
 65 <script type="text/javascript" src="../../static/h-ui.admin/js/H-ui.admin.js"></script>
 66 <!-- <script type="text/javascript" src="../../static/datatables/1.10.0/jquery.dataTables.min.js"></script> -->
 67 <!-- column moving script -->
 68 <script type="text/javascript" src="../../static/datatables/js/admin/1.10.8/jquery.dataTables.js"></script>
 69 <script type="text/javascript" src="../../static/datatables/js/admin/colResizable-1.5.min.js"></script>
 70 <script type="text/javascript" src="../../static/datatables/ColReorder/js/dataTables.colReorder.js"></script>
 71 <!-- buttons hide and show -->
 72 <script type="text/javascript" src="../../static/datatables/js/buttons/dataTables.buttons.min.js"></script>
 73 <script type="text/javascript" src="../../static/datatables/js/buttons/buttons.colVis.min.js"></script>
 74
 75
 76
 77 <script type="text/javascript">
 78
 79         var table ;
 80         $(function(){
 81             table = $(‘.table-sort‘).dataTable({
 82                 "bServerSide" : true,
 83                 "bAutoWidth" : false,
 84                 "processing" : true,
 85                 "ordering" : true,
 86                 "bFilter": true,
 87                 "searching" : true,
 88                 "order": [[ 1, "desc" ]] ,
 89                 "bPaginate" : true,
 90                 "lengthMenu": [
 91                         [ 5, 10, 20, 30, 40, 50, -1 ],
 92                         [ 5, 10, 20, 30, 40, 50, "All"]
 93                  ],
 94                 "dom" : ‘Blfrtip‘,
 95                 "buttons": [ //for columns selective hide and show
 96                              {
 97                                 extend: ‘colvis‘,
 98                                 text: ‘列段显示/隐藏‘
 99                              },
100                            /*  {
101                                 extend: ‘excel‘
102
103                             },
104                             {
105                                 extend: ‘print‘,
106                                 text: ‘打印‘,
107                                 exportOptions: {
108                                     //columns: ‘:visible‘
109                                 }
110                              }, */
111                  ],
112                 "ajax" : {
113                     "url" : "/functionController/datagrid",
114                     "data" : function(d) {
115                         //real-time remote search params pass to server
116                         var searchtext = $(".dataTables_wrapper .dataTables_filter input").val();
117                         if(searchtext != null){
118                             d.searchtext = encodeURI(searchtext);
119                         }
120                         //keywords search params pass to server
121                         var sel = $(‘#btnSelected‘).val();  //columns name in selectbox
122                         if(sel == 1){
123                             d.keysearch = encodeURI($(‘#keysearch‘).val());
124                         }
125
126
127                     }
128                 },
129                 "columns" : [{
130                     "data" : ""
131                 }, {
132                     "data" : "text"
133                 }, {
134                     "data" : "functionurl"
135                 }, {
136                     "data" : "systemflag"
137                 }, {
138                     "data" : ""
139                 } ],
140                 "columnDefs" : [
141                         {
142                             "orderable": false,
143                             "render" : function(data, type, row) {
144                                 var buttons = ‘‘;
145                                     buttons +="<a href=‘javascript:void(0);‘ onClick=\"handle_ed(‘" + row.id + "‘)\" ><i class=‘Hui-iconfont‘></i><i class=‘im-pencil2‘></i></a>";
146                                     buttons +=" <a href=‘javascript:void(0);‘  onClick=\"function_del(‘one‘,‘" + row.id + "‘)\" ><i class=‘Hui-iconfont‘></i></a>";
147                                 return buttons;
148                             },
149                             "targets" : 4,
150                         },
151                         {
152                             "sWidth": "95px",
153                             "orderable": false,
154                             "render" : function(data, type, row) {
155                                 var buttons = ‘‘;
156                                 buttons += "<input type=‘checkbox‘ value=‘" + row.id + "‘ name=‘checkList‘>";
157                                 return buttons;
158                             },
159                             "targets" : 0,
160                         },
161                         {
162                             "render": function(data, type, row) {
163                                 var flag = ‘‘;
164                                 if( row.systemflag == 1){
165                                     flag = "是";
166                                 }
167                                 return flag;
168                             },
169                             "targets" :3,
170                             "bSearchable":true
171
172                         }],
173                  "language" : {
174                     "url" : "../../static/datatables/i18n/Chinese.json"
175                 }
176             });
177
178             //columns moving
179             new $.fn.dataTable.ColReorder( table, {
180                 // options
181             } );
182             //使用col插件实现表格头宽度拖拽
183             $(".table").colResizable();
184
185         });
186         /*单条件查询*/
187         $(‘#btnSearch‘).on(‘click‘, function(){
188             table.fnDraw();
189         });
190
191         /*添加*/
192         function handle_add(){
193             layer.open({
194                 type: 2,
195                 title: ‘新增功能‘,
196                 area: [‘500px‘,‘360px‘],
197                 offset: ‘50px‘,
198                 maxmin: true,
199                 content: ‘${pageContext.request.contextPath}/functionController/toFunctionAddPage‘,
200                 end: function(){
201                     table.fnDraw();
202                 }
203             });
204         }
205
206         /**全选、反选**/
207         $("#checkbox").click(
208                 function () {
209                     if (this.checked) {
210                         $("input[name=‘checkList‘]").each(function () {
211                             this.checked = true;
212                         });
213                     } else {
214                         $("input[name=‘checkList‘]").each(function () {
215                             this.checked = false;
216                         });
217                     }
218                 }
219         );
220
221         /*编辑*/
222         function handle_ed(id){
223             layer.open({
224                 type: 2,
225                 title: [‘编辑功能‘, ‘font-size:18px‘],
226                 shadeClose: true,
227                 offset: ‘50px‘,
228                 content: ‘/functionController/toFunctionEditPage?id=‘+id,
229                 shif: 2,
230                 maxmin: true,
231                 area: [‘490px‘,‘360px‘],
232                 end: function(){
233                     table.fnDraw();
234                 }
235             });
236         }
237
238         /*刷新**/
239         function reloadTable(){
240             layer.msg("刷新成功");
241             table.fnDraw();
242         }
243
244         //Delete multiple data
245         function delall(){
246             var str = ‘‘;
247             $("input[name=‘checkList‘]:checked").each(function (i, o) {
248                     str += $(this).val();
249                     str += ",";
250             });
251              function_del("many",str);
252         }
253         /**删除数据行**/
254          function function_del(flag,id) {
255
256              var count=0;
257                 var str = ‘‘;
258                 $("input[name=‘checkList‘]:checked").each(function (i, o) {
259                         str += $(this).val();
260                         str += ",";
261                         count++;
262                 });
263
264                 if (str.length > 0 || id.length > 0) {
265
266                     if(flag == "one"){
267                         if (count>1) {
268                             layer.msg("单行删除,不支持多选");
269                             return;
270                         }
271                     }
272                     var msg =‘‘;
273                     if(count == 0 ){
274                         msg = "您确定删除此菜单吗?";
275                     }else{
276                         if(flag == "one"){
277                             msg = "您确定删除此菜单吗?";
278                         }else{
279                             msg = "您确定删除"+count+"个菜单吗?";
280                         }
281                     }
282                     if (!confirm(msg)) {
283                         return;
284                     }
285                     var ids = str.substr(0, str.length - 1);
286                     $.ajax({
287                         dataType: ‘json‘,
288                         type: ‘post‘,
289                         cache: false,
290                         url: ‘/functionController/remove‘,
291                         data: {
292                              ids: id ? id : ids,
293                         },
294                         async: false,
295                         success: function (data) {
296                             layer.msg(data.msg);
297                             table.fnDraw();
298                         }
299                     });
300                 } else {
301                     layer.msg("至少选择一条记录操作");
302                 }
303             }
304 </script>
305 </body>
306 </html>

后台代码:

 1 @RequestMapping("/datagrid")
 2     @ResponseBody
 3     public JSONObject allMenu(Ts_Function tmenu,String keysearch, String searchtext, String draw,String start,String length,HttpServletRequest request) {
 4         Map map = new HashMap();//条件存储
 5         JSONObject jsonObject = new JSONObject(true);
 6         JSONArray jsonArray = new JSONArray();
 7         List<HashMap<String, Object>> tmenuList;
 8         String tt = "";
 9
10         //obtain the order params {order: column number; dir: desc/asc;  orderColumn: column name
11         String order=request.getParameter("order[0][column]");
12         String dir=request.getParameter("order[0][dir]");
13         String orderColumn = request.getParameter("columns["+order+"][data]");
14
15         map.put("dir", dir);
16         map.put("orderColumn", orderColumn);
17
18         if(Integer.valueOf(length) != -1){
19             int page=0;
20             int row= Integer.valueOf(length == null ? "10":length);
21             if (null!=start && null!=length) {
22                 page = Integer.valueOf(start) / Integer.valueOf(length) + 1;
23             } else {
24                 page = 1;
25                 row = 10;
26             }
27             PageHelper.startPage(page, row);
28             if(searchtext !=null){
29                 searchtext =URLDecoder.decode(searchtext, "utf-8");
30                 if(searchtext.equals("是")){
31                     searchtext = "1";
32                 }
33                 map.put("searchtext", searchtext);
34             }
35             //keywords search
36             if(keysearch !=null){
37                 keysearch =URLDecoder.decode(keysearch, "utf-8");
38                 map.put("keysearch", keysearch);
39             }
40             tmenuList = menuService.selectAll(map);
41             Page pageInfo = (Page) tmenuList;
42             jsonObject.put("draw",draw);
43             jsonObject.put("recordsTotal", pageInfo.getTotal());
44             jsonObject.put("recordsFiltered",pageInfo.getTotal());
45         }else{
46             if(searchtext !=null){
47                 tt =URLDecoder.decode(searchtext, "utf-8");
48                 if(tt.equals("是")){
49                     tt = "1";
50                 }
51             }
52             if(keysearch !=null){
53                 keysearch =URLDecoder.decode(keysearch, "utf-8");
54                 map.put("keysearch", keysearch);
55             }
56             tmenuList = menuService.selectAll(map);
57
58             jsonObject.put("draw",draw);
59             jsonObject.put("recordsTotal", tmenuList.size());
60             jsonObject.put("recordsFiltered", tmenuList.size());
61         }
62
63
64         for(Map<String, Object> temp : tmenuList)
65         {
66              JSONObject info = new JSONObject();
67              //放入页面需要展示的值
68              info.put("id",temp.get("id"));
69              info.put("text",temp.get("text"));
70              info.put("functionurl",temp.get("functionurl"));
71              info.put("systemflag",temp.get("systemflag"));
72              jsonArray.add(info);
73         }
74         jsonObject.put("data",jsonArray);
75
76         return jsonObject;
77     }

代码中的Page 和PageHelper的引用代码:import com.github.pagehelper.Page;

                  import com.github.pagehelper.PageHelper;

时间: 2024-11-04 14:29:58

Datatables表格控件的使用相关网站及遇到的问题的相关文章

Qt实现表格控件-支持多级列表头、多级行表头、单元格合并、字体设置等

目录 一.概述 二.效果展示 三.定制表头 1.重写数据源 2.重写QHeaderView 四.设置属性 五.相关文章 原文链接:Qt实现表格控件-支持多级列表头.多级行表头.单元格合并.字体设置等 一.概述 最近在研究QTableView支持多级表头的事情,百度了下网上资料还是挺多的.实现的方式总的来说有2种,效果都还不错,最主要是搞懂其中的原理,做到以不变应万变. 实现多级表头的方式有以下两种方案 行表头和列表头都是用一个表格去模拟 重写QHeadView 以上两种方式都可以实现多级表头,各

能在多种前端框架下使用的表格控件

近几年Web前端框架特别流行,比如AngularJS.AngularJS 2.ReactJS.KnockoutJS.VueJS等.表格控件是我们在开发中经常要用到的控件.有没有能够在多种前端控件下都能使用的表格控件?最近研究发现Wijmo中的FlexGrid是一款不错的表格控件,它能支持很多主流的框架.这里主要介绍在纯JavaScript和AngularJS下FlexGrid的使用. 一.在纯JavaScript下使用FlexGrid HTML文件: <!DOCTYPE html> <h

Silverlight项目笔记5:Oracle归档模式引起的异常&amp;&amp;表格控件绑定按钮

两个问题: (1)Oracle无法连接正常使用,原因是归档日志满了引起异常,最后选择删除归档日志恢复正常. (2)使用silverlight自带的表格绑定按钮竟然无法使用,通过变通绑定数据源集合,把按钮操作作为数据源集合一部分,重新绑定解决. 一.Oracle归档模式产生日志文件引起数据库异常 连接数据库失败,提示监听错误,各种检查监听配置文件,删除再添加监听,无果. sqlplus下重启数据库数据库依然无果,期间碰到多个错误提示: ORA-01034: ORACLE not available

Essential Grid for ASP.NET MVC表格控件详细介绍及下载

Essential Grid for ASP.NET MVC是一款轻量级的,支持AJAX的,高性能的表格控件,完全支持ASP.NET MVC框架,具有丰富的功能,包含分组.排序.翻页.数据绑定.编辑.过滤.多种内嵌皮肤,可以处理上亿的数据量. 具体功能: 支持对一列或多列数据进行分组 支持单行.列.多行选择 支持通过拖拉操作调整列大小.改变列位置 支持Unbound列 当表格数据有几页时,控件提供了一个页导航条,可用于定位某页或是翻页 支持过滤操作 支持绑定到复杂的数据对象 支持导出数据到Exc

SpreadJS 表格控件发布V11版本,新增图表及前端PDF导出!

日前,全球最大的控件提供商葡萄城宣布,SpreadJS 纯前端表格控件正式发布V11 版本.新版本亮点颇多,不但为用户带来期待已久的图表功能,还新增前端导出 PDF.列分组等功能,在数据可视化方面更进一步,受到了开发人员的广泛关注. SpreadJS是基于HTML5的JavaScript电子表格和网格功能控件,适用于.NET.Java和移动端等各平台在线编辑类Excel功能的表格程序开发.开发人员可利用SpreadJS,更好的显示和管理类似 Excel 的数据,更方便的进行公式引擎.排序.过滤.

VS2010 Chart控件(一)Chart控件在ASP.NET网站中的应用示例详解(C#语言)

步骤如下: 1. Chart控件(一)Chart控件在ASP.NET网站中的应用示例详解(C#语言)" title="VS2010 Chart控件(一)Chart控件在ASP.NET网站中的应用示例详解(C#语言)" action-data="http%3A%2F%2Fs8.sinaimg.cn%2Fmw690%2F6988593etx6DhZWSOATc7%26690" action-type="show-slide" style=&

葡萄城首席架构师:前端开发与Web表格控件技术解读

讲师:Issam Elbaytam,葡萄城集团全球首席架构师(Chief Software Architect of GrapeCity Global).曾任 Data Dynamics.Inc 创始人兼资深产品经理,个人研究方向主要为 MS.NET语言及平台.动态化系统构建,以及高性能大型分布式Web系统架构,主导了葡萄城多款畅销控件产品的系统架构与性能优化.   “25年来每天只休息4小时,除了日常作息时间,Issam不是在研究技术和产品,就是在去研究技术发展趋势的路上”这就是葡萄城同事对他

最好的Angular2表格控件

最好的Angular2表格控件 现在市面上有大量的JavaScript数据表格控件,包括开源的第三方的和自产自销的.可以说Wijmo的Flexgrid是目前适应Angular 2的最好的表格控件. Angular 2数据表格基本要求: 更小.更快.更熟悉. 为了使用Angular 2表格,首先你需要了解表格的基本要求.FlexGrid开始于1996年,当时使用C++为Visual Basic编写的控件.多年来,它不断进化并在多个平台得到完善,尤其是JavaScript平台.FlexGrid 因为

javascript可编辑表格控件 支持全键盘操作

项目中经常会用到表格编辑控件,网上也有不少,但是确实没有完全符合我要求的, 自己写一个吧! 1.该控件支持 数据显示列,文本编辑列,选择列,下拉列,索引列,删除列 六种列类型 2.支持全键盘操作,自定义键位 包括:列焦点切换,行焦点切换,新建行,数据保存(默认 上,下,左,右 键操作) 3.丰富的事件,绝大多数的客户端操作都能触发无刷新后台事件 4.支持统计运算,可自定义运算插件 5.兼容 Ie,chorme,firefox等绝大多数主流浏览器 下载地址:http://files.cnblogs