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

项目中经常会用到表格编辑控件,网上也有不少,但是确实没有完全符合我要求的,

自己写一个吧!

1.该控件支持 数据显示列,文本编辑列,选择列,下拉列,索引列,删除列 六种列类型

2.支持全键盘操作,自定义键位 包括:列焦点切换,行焦点切换,新建行,数据保存(默认 上,下,左,右 键操作)

3.丰富的事件,绝大多数的客户端操作都能触发无刷新后台事件

4.支持统计运算,可自定义运算插件

5.兼容 Ie,chorme,firefox等绝大多数主流浏览器

下载地址:http://files.cnblogs.com/dint/WebGridEditor.rar

客户端调用代码:

<table id=‘table1‘ border=‘1‘ class=‘hgeTableCss‘ cellspacing=‘0‘ cellpadding=‘0‘ style=‘width:700px‘>
      	<tr>
      		<th style=‘width:20px‘></th>
      	  <th>ID</th>
      	  <th>Name</th>
      	  <th>Sex</th>
      	  <th>Address</th>
      	  <th>Content</th>
      	  <th>delete</th>
      	</tr>
      	<tr>
      		<td></td>
      		<td> 111</td>
      		<td> </td>
      		<td> </td>
      		<td> </td>
      		<td> </td>
      		<td></td>
        </tr>
      </table>

   <script type=‘text/javascript‘>
	 var editor1;
    	 var myrows=[
    	   [‘1‘,‘2‘,‘3‘,‘bbb‘,‘5‘],
    	   [‘1‘,‘2‘,‘3‘,‘ccc‘,‘5‘],
    	   [‘1‘,‘2‘,‘3‘,‘aaa‘,‘5‘],
    	   [‘1‘,‘2‘,‘3‘,‘ccc‘,‘5‘],
    	   [‘1‘,‘2‘,‘3‘,‘bbb‘,‘5‘]
    	  ];
      editor1=new HtGridEditor(‘table1‘);
      editor1.bIndex=true;
      editor1.datas.rows=myrows;
      editor1.vWidth=‘500px‘;
      editor1.Columns=[
      {type:1,defv:‘111‘,funk:true}
      ,{type:1,defv:‘dingtao‘,change:true}
      ,{type:1,defv:‘hello‘,nexk:true}
      ,{type:2,drpItems:[{dtext:‘aaa‘,dvalue:‘aaa‘},
      	{dtext:‘bbb‘,dvalue:‘bbb‘},
      	{dtext:‘ccc‘,dvalue:‘ccc‘}],defv:‘bbb‘,change:true
      	}
      ,null
      ,{type:10,defv:‘del‘}
      ];
      editor1.Footers=[{index:1,colspan:2,text:‘TotalA:{0},TotalB:{1}‘,console:[‘SUM-2‘,‘SUM-0‘]}
      ,{index:3,text:‘合计‘}];
editor1.bDownNew=true;
      editor1.fixedHeader=true;     editor1.ShowEditor();</script>

  

直接上效果图了

1.表头不固定,无表尾

表头不固定 有表尾

表头固定 无表尾

表头固定 有表尾

服务器端处理请求的代码 (C#)

  1 using System;
  2 using System.Collections;
  3 using System.Configuration;
  4 using System.Data;
  5 using System.Web;
  6 using System.Web.Security;
  7 using System.Web.UI;
  8 using System.Web.UI.HtmlControls;
  9 using System.Web.UI.WebControls;
 10 using System.Web.UI.WebControls.WebParts;
 11 using Newtonsoft.Json;
 12
 13 namespace HTGridEditorTest
 14 {
 15     public partial class _Default : System.Web.UI.Page
 16     {
 17         protected void Page_Load(object sender, EventArgs e)
 18         {
 19             string hgeAjax = Request["HGE_AJAX_VER"];//HGE_AJAX_VER HtGridEditor Ajax版本
 20             if ((hgeAjax != null) && (hgeAjax == "1_0_0"))//HtGridEditor请求的数据 版本号 一般通过这个标识判断是否为 HtGridEditor的ajax请求
 21             {
 22                 if (Request["method"] == "REFRESH")
 23                 {
 24                     Response.Clear();
 25                     HgeCommand c = new HgeCommand();
 26                     c.cmd = "refresh";
 27                     string[][] data = new string[100][];
 28                     Random r = new Random();
 29                     for (var i = 0; i < 100; i++)
 30                     {
 31                         data[i] = new string[5];
 32                         data[i][0] = (i + 10).ToString();
 33                         data[i][1] = "商品" + r.Next(10).ToString();
 34                         data[i][2] = r.Next(10000).ToString();
 35                         data[i][3] = "ccc";
 36                         data[i][4] = "ddd";
 37                     }
 38                     c.data = data;
 39                     Response.Write(JsonConvert.SerializeObject(c));
 40                     Response.End();
 41                 }
 42                 else if (Request["method"] == "REMOVED")//method 操作类型 REMOVED删除行 CREATED新建行
 43                 {
 44                     Response.Clear();
 45                     HgeCommand c = new HgeCommand();
 46                     c.cmd = "message";
 47                     c.data = "delete one row "+Request["OROW"];
 48                     HgeCommand[] cs = new HgeCommand[1];
 49                     cs[0] = c;
 50                     Response.Write(JsonConvert.SerializeObject(cs));
 51                     Response.End();
 52                 }
 53                 else if (Request["method"] == "CREATED")
 54                 {
 55                     Response.Clear();
 56                     string str = Request["OROW"];//新建的行的值
 57                     string[] arr = JsonConvert.DeserializeObject<string[]>(str);
 58                     string resps = "";
 59                     for (int i = 0; i < arr.Length; i++) resps += arr[i] + ",";
 60                     HgeCommand c = new HgeCommand();
 61                     c.cmd = "message";
 62                     c.data = "create a new row data:" + resps.Trim(‘,‘);
 63                     HgeCommand[] cs = new HgeCommand[1];
 64                     cs[0] = c;
 65                    // Response.Write(JsonConvert.SerializeObject(cs));
 66                     //Response.End();
 67                 }
 68                 else if (Request["method"] == "CHANGED")//选择行改变
 69                 {
 70                     Response.Clear();
 71                     string str = Request["NROW"];
 72                     string[] arr = JsonConvert.DeserializeObject<string[]>(str);
 73                     string resps = "";
 74                     for (int i = 0; i < arr.Length; i++) resps += arr[i] + ",";
 75                     HgeCommand c = new HgeCommand();
 76                     c.cmd = "message";
 77                     c.data ="select row changed data:" + resps.Trim(‘,‘);
 78                     HgeCommand[] cs = new HgeCommand[1];
 79                     cs[0] = c;
 80                     Response.Write(JsonConvert.SerializeObject(cs));
 81                     Response.End();
 82                 }
 83                 else if (Request["method"] == "SAVED")//保存数据
 84                 {
 85                     Response.Clear();
 86                     string[][] arr = JsonConvert.DeserializeObject<string[][]>(Request["SVDATA"]);
 87                     string resps = "";
 88                     for (int i = 0; i < arr.Length; i++)
 89                     {
 90                         resps += "[";
 91                         for (int j = 0; j < arr[i].Length; j++)
 92                         {
 93                             resps += arr[i][j] + ",";
 94                         }
 95                         resps = resps.Trim(‘,‘) + "],";
 96                     }
 97                     HgeCommand c = new HgeCommand();
 98                     c.cmd = "message";
 99                     c.data = "select row saved data:" + resps.Trim(‘,‘);
100                     HgeCommand[] cs = new HgeCommand[1];
101                     cs[0] = c;
102                     Response.Write(JsonConvert.SerializeObject(cs));
103                     Response.End();
104                 }
105                 else if(Request["method"]=="TXTCHANGED"){//文本改变
106                     Response.Clear();
107                     HgeCommand c = new HgeCommand();
108                     c.cmd = "message";
109                     c.data ="input changed in row " + Request["IROW"]
110                         + " and cell " + Request["ICELL"] + " and value " + Request["VALUE"]+" and row value "+Request["OROW"];
111                     HgeCommand[] cs = new HgeCommand[1];
112                     cs[0] = c;
113                     Response.Write(JsonConvert.SerializeObject(cs));
114                     Response.End();
115                 }
116                 else if (Request["method"] == "FOCUSNEXT")//当前编辑文本因为按enter失去焦点
117                 {
118                     Response.Clear();
119                     HgeCommand c = new HgeCommand();
120                     c.cmd = "message";
121                     c.data = "focus next in row " + Request["IROW"]
122                          + " and cell " + Request["ICELL"] + " and value " + Request["VALUE"] +" and row value "+ Request["OROW"];
123                     HgeCommand[] cs = new HgeCommand[1];
124                     cs[0] = c;
125                     Response.Write(JsonConvert.SerializeObject(cs));
126                     Response.End();
127
128
129                     //服务器端可以使用如下的命令控制客互端的行为 命令的详细说明见 HtGridEditor.js
130                     /*HgeCommand c = new HgeCommand();
131                     c.cmd="message";
132                     c.data=" hello HtGridEditor !";*/
133
134
135                     /*HgeCommand c = new HgeCommand();
136                     c.cmd = "selectopitons";
137                     c.icell = "4";
138                     c.selectvalue = "5555";
139                     string[][] options=new string[6][];
140                     options[0] = new string[2] { "EEEE", "1111" };
141                     options[1] = new string[2] { "FFFF", "2222" };
142                     options[2] = new string[2] { "GGGG", "3333" };
143                     options[3] = new string[2] { "HHHH", "4444" };
144                     options[4] = new string[2] { "IIII", "5555" };
145                     options[5] = new string[2] { "JJJJ", "6666" };
146                     c.data = options;
147                     c.select_cache = "cache";*/
148
149
150                     /*HgeCommand c = new HgeCommand();
151                     c.cmd = "setcell";
152                     c.data = new string[3] { "1", "2", "hello test setcell command" };*/
153
154                     /*HgeCommand c = new HgeCommand();
155                     c.cmd = "setcells";
156                     string[][] cells = new string[3][];
157                     cells[0] = new string[3] {"1","2","test setcells command"};
158                     cells[1] = new string[3] {"2","4","aaa"};
159                     c.data = cells;*/
160
161                     /*HgeCommand c = new HgeCommand();
162                     c.cmd = "setrow";
163                     c.data = new string[5]{"2", "cell a", "cell b", "cell c", "bbb"};*/
164
165                     /*HgeCommand c = new HgeCommand();
166                     c.cmd = "setrowedit";
167                     c.data = "4";*/
168
169                     /*HgeCommand c = new HgeCommand();
170                     c.cmd = "setcellfocus";
171                     c.data = "2";*/
172
173                     /*HgeCommand c = new HgeCommand();
174                     c.cmd = "newrow";
175                     c.data = "focus";*/
176
177                     /*HgeCommand[] cs = new HgeCommand[1];
178                     cs[0] = c;
179                     Response.Write(JsonConvert.SerializeObject(cs));
180                     Response.End();*/
181
182                     //也可以由若干命令组合使用 前端会按顺序执行
183                     //如:新建一行 使其获得焦点 且中当前列
184                    /* HgeCommand[] cs = new HgeCommand[2];
185                     HgeCommand c = new HgeCommand();//新建一行
186                     c.cmd = "newrow";
187                     c.data = "focus";
188                     cs[0] = c;
189                     c = new HgeCommand();//使新行的当前列获得焦点
190                     c.cmd = "setcellfocus";
191                     c.data = Request["ICELL"];
192                     cs[1] = c;
193                     Response.Write(JsonConvert.SerializeObject(cs));
194                     Response.End();*/
195                 }
196             }
197             else
198             {
199
200             }
201
202         }
203
204     }
205     public class HgeCommand
206     {
207         public string cmd;
208         public string icell;
209         public string selectvalue;
210         public string select_cache;
211         public object data;
212     }
213 }

javascript可编辑表格控件 支持全键盘操作,布布扣,bubuko.com

时间: 2024-10-12 23:30:22

javascript可编辑表格控件 支持全键盘操作的相关文章

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

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

可以导入导出到Excel支持多表头多层显示的表格控件Essential Grid

Essential Grid for Windows Forms是一款功能强大的表格控件,很多功能和Excel表格相似,具有15种单元格类型,可以导入导出到Excel,支持多表头,多层显示,合并单元格,插入计算公式,支持LINQ,过滤和分组等. 具体功能: 支持Banner Cells,可以联合背景和邻近的单元格来显示一个背景图像或图片 支持完全自定义单元格样式 支持多个单元格覆盖合并 可以冻结行和列 表格控件支持MS Office 2003, MS Office 2007 和 Vista 样式

纯前端表格控件SpreadJS V11.2新版本发布,全面支持React和Vue

SpreadJS是一款基于 HTML5 的纯 Java 电子表格和网格功能控件,在外观.功能和操作上都与 Excel 高度类似,在表格数据处理上比 Grid 类控件更为优秀,被开发人员誉为"可嵌入系统开发的在线Excel". 近日,纯前端表格控件 SpreadJS V11.2 正式推出,全面支持 React 和Vue,并提供了工作表区域偏移和 CSS 自定义分组等功能. 本次更新的主要内容有: SpreadJS 全面支持 React 和 Vue SpreadJS 现在支持与 React

葡萄城首席架构师:前端开发与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 因为

tbl.js div实现的表格控件,完全免费,no jquery

html上现在有比较好用的表格控件是datatable,但是编辑.按钮等部分是收费的,只有基础功能免费.而且尺寸发生变化时需要手工刷新等繁琐操作较多.所以我开发一个免费的供大家使用. 本项目已用于“虚空服务器开发套件”.目前主要支持微软Edge浏览器,Chrome浏览器,其它未测. tbl.js完全免费,可随意修改,欢迎fork. tbl.js支持列表样式,增删改查,全表搜索,分组,分页功能,全表编辑,全行编辑,单选,多选,样式定制. 可以嵌入到各种容器中,比如jquery的dialog,tab

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

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

SpreadJS纯前端表格控件V11.1震撼来袭

全球最大的控件提供商葡萄城宣布,纯前端表格控件SpreadJS 正式发布2018 V11.1 版本,新版本提供撤销/重做功能,并增强了UI和数据筛选,极大的扩展了产品的实用功能,可更加方便优雅的嵌入您的应用系统. Spread 是一系列功能和Excel类似的表格工具,支持桌面.Web和移动平台开发,用于在您的应用系统中实现Excel导入导出.表格数据录入和编辑等交互功能,并提供灵活的定制能力和丰富的数据可视化效果.Spread 在功能和布局上与Excel高度相似,全系列包括适用于前端平台Spre

葡萄城SpreadJS表格控件荣获&amp;ldquo;2018年度优秀软件产品&amp;rdquo;称号

日前,中国软件行业协会权威发布"2018年优秀软件产品"名单,葡萄城SpreadJS 纯前端表格控件产品荣耀上榜,凭借其对Excel的高度兼容性和处理海量数据时的绝佳性能表现,获得行业和用户的高度认可. "年度优秀软件产品"是由中国软件行业协会组织评选,旨在发掘并推介优秀软件产品,培育著名软件品牌,为政府采购.大型信息化工程招标项目提供参考.整个评选历时3个多月,由多位行业专家对参软软件进行多轮评估.评选,最终选出优秀产品,予以公布. 葡萄城的SpreadJS 是一