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

自己写一个吧!

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#)

 using System;
 using System.Collections;
 using System.Configuration;
 using System.Data;
 using System.Web;
 using System.Web.Security;
 using System.Web.UI;
 using System.Web.UI.HtmlControls;
 using System.Web.UI.WebControls;
 using System.Web.UI.WebControls.WebParts;
 using Newtonsoft.Json;

 namespace HTGridEditorTest
 {
     public partial class _Default : System.Web.UI.Page
     {
         protected void Page_Load(object sender, EventArgs e)
         {
             string hgeAjax = Request["HGE_AJAX_VER"];//HGE_AJAX_VER HtGridEditor Ajax版本
             if ((hgeAjax != null) && (hgeAjax == "1_0_0"))//HtGridEditor请求的数据 版本号 一般通过这个标识判断是否为 HtGridEditor的ajax请求
             {
                 if (Request["method"] == "REFRESH")
                 {
                     Response.Clear();
                     HgeCommand c = new HgeCommand();
                     c.cmd = "refresh";
                     ][];
                     Random r = new Random();
                     ; i < ; i++)
                     {
                         data[i] = ];
                         data[i][] = (i + ).ToString();
                         data[i][] = ).ToString();
                         data[i][] = r.Next().ToString();
                         data[i][] = "ccc";
                         data[i][] = "ddd";
                     }
                     c.data = data;
                     Response.Write(JsonConvert.SerializeObject(c));
                     Response.End();
                 }
                 else if (Request["method"] == "REMOVED")//method 操作类型 REMOVED删除行 CREATED新建行
                 {
                     Response.Clear();
                     HgeCommand c = new HgeCommand();
                     c.cmd = "message";
                     c.data = "delete one row "+Request["OROW"];
                     HgeCommand[] cs = ];
                     cs[] = c;
                     Response.Write(JsonConvert.SerializeObject(cs));
                     Response.End();
                 }
                 else if (Request["method"] == "CREATED")
                 {
                     Response.Clear();
                     string str = Request["OROW"];//新建的行的值
                     string[] arr = JsonConvert.DeserializeObject<string[]>(str);
                     string resps = "";
                     ; i < arr.Length; i++) resps += arr[i] + ",";
                     HgeCommand c = new HgeCommand();
                     c.cmd = "message";
                     c.data = "create a new row data:" + resps.Trim(',');
                     HgeCommand[] cs = ];
                     cs[] = c;
                    // Response.Write(JsonConvert.SerializeObject(cs));
                     //Response.End();
                 }
                 else if (Request["method"] == "CHANGED")//选择行改变
                 {
                     Response.Clear();
                     string str = Request["NROW"];
                     string[] arr = JsonConvert.DeserializeObject<string[]>(str);
                     string resps = "";
                     ; i < arr.Length; i++) resps += arr[i] + ",";
                     HgeCommand c = new HgeCommand();
                     c.cmd = "message";
                     c.data ="select row changed data:" + resps.Trim(',');
                     HgeCommand[] cs = ];
                     cs[] = c;
                     Response.Write(JsonConvert.SerializeObject(cs));
                     Response.End();
                 }
                 else if (Request["method"] == "SAVED")//保存数据
                 {
                     Response.Clear();
                     string[][] arr = JsonConvert.DeserializeObject<string[][]>(Request["SVDATA"]);
                     string resps = "";
                     ; i < arr.Length; i++)
                     {
                         resps += "[";
                         ; j < arr[i].Length; j++)
                         {
                             resps += arr[i][j] + ",";
                         }
                         resps = resps.Trim(',') + "],";
                     }
                     HgeCommand c = new HgeCommand();
                     c.cmd = "message";
                     c.data = "select row saved data:" + resps.Trim(',');
                     HgeCommand[] cs = ];
                     cs[] = c;
                     Response.Write(JsonConvert.SerializeObject(cs));
                     Response.End();
                 }
                 else if(Request["method"]=="TXTCHANGED"){//文本改变
                     Response.Clear();
                     HgeCommand c = new HgeCommand();
                     c.cmd = "message";
                     c.data ="input changed in row " + Request["IROW"]
                         + " and cell " + Request["ICELL"] + " and value " + Request["VALUE"]+" and row value "+Request["OROW"];
                     HgeCommand[] cs = ];
                     cs[] = c;
                     Response.Write(JsonConvert.SerializeObject(cs));
                     Response.End();
                 }
                 else if (Request["method"] == "FOCUSNEXT")//当前编辑文本因为按enter失去焦点
                 {
                     Response.Clear();
                     HgeCommand c = new HgeCommand();
                     c.cmd = "message";
                     c.data = "focus next in row " + Request["IROW"]
                          + " and cell " + Request["ICELL"] + " and value " + Request["VALUE"] +" and row value "+ Request["OROW"];
                     HgeCommand[] cs = ];
                     cs[] = c;
                     Response.Write(JsonConvert.SerializeObject(cs));
                     Response.End();

                     //服务器端可以使用如下的命令控制客互端的行为 命令的详细说明见 HtGridEditor.js
                     /*HgeCommand c = new HgeCommand();
                     c.cmd="message";
                     c.data=" hello HtGridEditor !";*/

                     /*HgeCommand c = new HgeCommand();
                     c.cmd = "selectopitons";
                     c.icell = "4";
                     c.selectvalue = "5555";
                     string[][] options=new string[6][];
                     options[0] = new string[2] { "EEEE", "1111" };
                     options[1] = new string[2] { "FFFF", "2222" };
                     options[2] = new string[2] { "GGGG", "3333" };
                     options[3] = new string[2] { "HHHH", "4444" };
                     options[4] = new string[2] { "IIII", "5555" };
                     options[5] = new string[2] { "JJJJ", "6666" };
                     c.data = options;
                     c.select_cache = "cache";*/

                     /*HgeCommand c = new HgeCommand();
                     c.cmd = "setcell";
                     c.data = new string[3] { "1", "2", "hello test setcell command" };*/

                     /*HgeCommand c = new HgeCommand();
                     c.cmd = "setcells";
                     string[][] cells = new string[3][];
                     cells[0] = new string[3] {"1","2","test setcells command"};
                     cells[1] = new string[3] {"2","4","aaa"};
                     c.data = cells;*/

                     /*HgeCommand c = new HgeCommand();
                     c.cmd = "setrow";
                     c.data = new string[5]{"2", "cell a", "cell b", "cell c", "bbb"};*/

                     /*HgeCommand c = new HgeCommand();
                     c.cmd = "setrowedit";
                     c.data = "4";*/

                     /*HgeCommand c = new HgeCommand();
                     c.cmd = "setcellfocus";
                     c.data = "2";*/

                     /*HgeCommand c = new HgeCommand();
                     c.cmd = "newrow";
                     c.data = "focus";*/

                     /*HgeCommand[] cs = new HgeCommand[1];
                     cs[0] = c;
                     Response.Write(JsonConvert.SerializeObject(cs));
                     Response.End();*/

                     //也可以由若干命令组合使用 前端会按顺序执行
                     //如:新建一行 使其获得焦点 且中当前列
                    /* HgeCommand[] cs = new HgeCommand[2];
                     HgeCommand c = new HgeCommand();//新建一行
                     c.cmd = "newrow";
                     c.data = "focus";
                     cs[0] = c;
                     c = new HgeCommand();//使新行的当前列获得焦点
                     c.cmd = "setcellfocus";
                     c.data = Request["ICELL"];
                     cs[1] = c;
                     Response.Write(JsonConvert.SerializeObject(cs));
                     Response.End();*/
                 }
             }
             else
             {

             }

         }

     }
     public class HgeCommand
     {
         public string cmd;
         public string icell;
         public string selectvalue;
         public string select_cache;
         public object data;
     }
 }

javascript - 可编辑表格控件 支持全键盘操作(无JS框架)的更多相关文章

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

    目录 一.概述 二.效果展示 三.定制表头 1.重写数据源 2.重写QHeaderView 四.设置属性 五.相关文章 原文链接:Qt实现表格控件-支持多级列表头.多级行表头.单元格合并.字体设置等 ...

  2. QRowTable表格控件-支持hover整行、checked整行、指定列排序等

    目录 一.开心一刻 二.嘴一嘴 三.效果展示 四.浅谈实现 五.自定义数据源 1.data函数 2.flags函数 六.自定义视图 1.目的 2.问题分析 七.测试 八.相关文章 原文链接:QRowT ...

  3. QRowTable表格控件(五)-重写表头排序、支持第三次单击恢复默认排序

    目录 一.原生表格 二.效果展示 三.实现方式 1.排序列定制 2.排序交互修改 四.相关文章 原文链接:QRowTable表格控件(五)-重写表头排序.支持第三次单击恢复默认排序 一.原生表格 开发 ...

  4. Qt实现表格树控件-支持多级表头

    目录 一.概述 二.效果展示 三.实现方式 四.多级表头 1.数据源 2.表格 3.QStyledItemDelegate绘制代理 五.测试代码 六.相关文章 原文链接:Qt实现表格树控件-支持多级表 ...

  5. 深入浅出ExtJS 第三章 表格控件

    3.1 表格的特性简介 >.Ext中的表格功能:包括排序/缓存/拖动/隐藏某一列/自动显示行号/列汇总/单元格编辑等实用功能; >.表格由类Ext.grid.GridPanel定义,继承自 ...

  6. QRowTable表格控件(三)-效率优化之-合理使用QStandardItem

    目录 一.开心一刻 二.概述 三.效果展示 四.QStandardItem 1.QStandardItem是什么鬼 2.性能分析 3.QStandardItem使用上的坑 五.相关文章 原文链接:QR ...

  7. QTableView表格控件区域选择-自绘选择区域

    目录 一.开心一刻 二.概述 三.效果展示 四.实现思路 1.绘制区域 2.绘制边框 3.绘制 五.相关文章 原文链接:QTableView表格控件区域选择-自绘选择区域 一.开心一刻 陪完客户回到家 ...

  8. QRowTable表格控件(二)-红涨绿跌

    目录 一.开心一刻 二.概述 三.效果展示 四.任务需求 五.指定列排序 六.排序 七.列对其方式 八.相关文章 原文链接:QRowTable表格控件(二)-红涨绿跌 一.开心一刻 一天,五娃和六娃去 ...

  9. QRowTable表格控件(四)-效率优化之-优化数据源

    目录 一.开心一刻 二.问题分析 三.重写数据源 1.自己存储数据 2.重写data接口 四.比较 五.相关文章 原文链接:QRowTable表格控件(四)-效率优化之-优化数据源 一.开心一刻 一程 ...

随机推荐

  1. Ubuntu apt-get "Hash Sum mismatch" 问题解决方法

    参考:ubuntu: apt-get update的时候遇到"Hash Sum mismatch"错误 在安装Mininet的时候,apt-get update的时候遇到了这个问题 ...

  2. python学习道路(day6note)(time &datetime,random,shutil,shelve,xml处理,configparser,hashlib,logging模块,re正则表达式)

    1.tiim模块,因为方法较多我就写在code里面了,后面有注释 #!/usr/bin/env python #_*_coding:utf-8_*_ print("time".ce ...

  3. [翻译]类型双关不好玩:C中使用指针重新解释是坏的

    原文地址 Type punning isn't funny: Using pointers to recast in C is bad. C语言中一个重新解释(reinterpret)数据类型的技巧有 ...

  4. 关于apache做301的问题

    http://www.internetmarketingninjas.com/blog/search-engine-optimization/301-redirects/ RedirectMatch ...

  5. C# MVC 页面静态化导致的问题

    在设置页面静态化的路由,代码如 //静态路由 routes.MapRoute( name: "html", url: "{controller}/{action}.htm ...

  6. myisam、innodb存储引擎比较

    MYSQL表类型(存储引擎) 1.概述 MySQL数据库其中一个特性是它的存储引擎是插件式的.用户可以根据应用需要选择存储引擎.Mysql默认支持多种存储引擎,以适用各种不同的应用需要.默认情况下,创 ...

  7. Python之路-(js正则表达式、前端页面的模板套用、Django基础)

    js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...

  8. Memcached,你懂的

    一.Memcached简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网 ...

  9. HBA相关知识

    HBA使用详解: 一般的AIX客户端支持的HBA为Emulex HBA卡和交换机硬件确保连接成功的标志: A. 如果是 Emulex卡,卡上的绿灯常亮,黄灯闪烁. B. 如果是 QLogic卡,卡上的 ...

  10. multiwii 2.4配置页面中文注释

                                                                                                         ...