编辑 Ext 表格(二)——— 编辑表格元素

一、编辑单元格

Ext 中通过配置表格的属性 plugins 来设置表格是否可编辑,

表格的配置具体如下:

var gridTable = Ext.create(‘Ext.grid.Panel‘, {

id: ‘gridTable‘,

region: ‘center‘,

layout: ‘fit‘,

columns: cols,

store: gridStore,

autoScroll: true,

selModel: {  // 光标显示的是单元格模式

selType: ‘cellmodel‘

},

plugins: [

Ext.create(‘Ext.grid.plugin.CellEditing‘, {

clicksToEdit: 1 //设置单击单元格编辑

})

],

});

配置完表格还需要对表格列的 editor 进行配置,

才能实现单元格编辑,例如:

{

text: ‘姓名‘,

dataIndex: ‘Name‘,

minWidth: 85,

maxWidth: 85,

sortable: false,

menuDisabled: true,

editor: {

xtype: ‘textfield‘,

enableKeyEvents: false,

}

},

{

text: ‘列‘,

dataIndex: ‘col‘,

width: 120,

sortable: false,

menuDisabled: true,

renderer: function (a, b, c, rowIdx, colIdx) {

if ("object" == typeof (a)) {

var r = Ext.util.Format.date(a, ‘H:i‘);

return r;

}

return "";

},

editor: {

xtype: ‘timefield‘,

format: ‘H:i‘,

enableKeyEvents: false,

}

}

效果如下:

修改完按回车键,发现修改的单元格左上角有一个红色三角形,

这是 Ext 用来标记修改过的单元格,

如果想要修改完后不显示红色图标,

可以调用 commit()。

例如可以在 gridTable 中绑定一个 ‘edit‘ 事件,

当检测到单元格数据发生改变的时候触发,

代码如下:

listeners: {

‘edit‘: function (editor, e) {

e.record.commit();

},

}

二、右击单元格弹窗

首先先定义一个右键弹窗的面板,如下:

var contextmenu = new Ext.menu.Menu({

id: ‘context-menu‘,

items: [{

id: ‘context-menu-first‘,

rowIdx: 0,

colIdx: 0,

handler: function (m) {

if ("设置" == m.text) {

Ext.MessageBox.alert("提示", "设置成功");

}

}

}]

});

然后在 gridTable 中定义一个鼠标右击事件:

‘itemcontextmenu‘: function (view, record, item, index, e) {

// 禁用系统默认右键菜单

e.preventDefault();

contextmenu.items.items[0].setText("设置");

contextmenu.showAt(e.getXY());

}

效果如下:

完整的代码:

  1  <!-- 数据定义 -->
  2 <script type="text/javascript">
  3     var data;  // 表格数据
  4     var cols;   // 表格列
  5
  6     var gridStore = Ext.create(‘Ext.data.Store‘, {
  7         fields: [‘Name‘]
  8     });
  9
 10 </script>
 11
 12 <!-- 事件定义 -->
 13 <script type="text/javascript">
 14     // 初始化整个页面
 15     function onInit() {
 16         onLoadData();
 17
 18         onInitVar();
 19         onInitColumn();
 20     };
 21     // 请求加载表格数据
 22     function onLoadData() {
 23         data = [{ ‘Name‘: ‘老狼‘ }, { ‘Name‘: ‘小羊‘ }];
 24         gridStore.loadData(data);
 25     };
 26
 27     // 初始化页面的变量参数
 28     function onInitVar() {
 29         cols = [
 30             {
 31                 xtype: ‘rownumberer‘,
 32                 text: ‘序号‘,
 33                 align: ‘center‘,
 34                 minWidth: 50,
 35                 maxWidth: 50,
 36             },
 37             {
 38                 text: ‘姓名‘,
 39                 dataIndex: ‘Name‘,
 40                 minWidth: 85,
 41                 maxWidth: 85,
 42                 sortable: false,
 43                 menuDisabled: true,
 44                 editor: {
 45                     xtype: ‘textfield‘,
 46                     enableKeyEvents: false,
 47                 }
 48             }
 49         ];
 50     };
 51     // 初始化列
 52     function onInitColumn() {
 53         gridTable.reconfigure(gridStore, cols);
 54     };
 55
 56     // 添加行
 57     function onAddRow() {
 58         gridStore.add({});
 59     };
 60     // 删除行
 61     function onDelRow() {
 62         gridStore.removeAt(gridStore.count() - 1);
 63     };
 64     // 添加列
 65     function onAddColumn() {
 66         cols.push({
 67             text: ‘列‘,
 68             dataIndex: ‘col‘,
 69             width: 120,
 70             sortable: false,
 71             menuDisabled: true,
 72             editor: {
 73                 xtype: ‘textfield‘,
 74                 enableKeyEvents: false,
 75             }
 76         });
 77
 78         gridTable.reconfigure(gridStore, cols);
 79     };
 80     // 删除列
 81     function onDelColumn() {
 82         cols.pop()
 83         gridTable.reconfigure(gridStore, cols);
 84     };
 85
 86     // 保存
 87     function onSave() {
 88
 89         console.log(gridTable);
 90         console.log(gridStore.data);
 91     };
 92
 93 </script>
 94
 95 <!-- 面板定义 -->
 96 <script type="text/javascript">
 97     var toolbar = Ext.create(‘Ext.form.Panel‘, {
 98         id: ‘tool-bar‘,
 99         region: ‘north‘,
100         bbar: [
101             {
102                 xtype: ‘button‘,
103                 text: ‘添加行‘,
104                 handler: onAddRow
105             },
106             {
107                 xtype: ‘button‘,
108                 text: ‘删除行‘,
109                 handler: onDelRow
110             },
111             {
112                 xtype: ‘button‘,
113                 text: ‘添加列‘,
114                 handler: onAddColumn
115             },
116             {
117                 xtype: ‘button‘,
118                 text: ‘删除列‘,
119                 handler: onDelColumn
120             },
121             {
122                 xtype: ‘button‘,
123                 text: ‘保存‘,
124                 handler: onSave
125             }
126         ]
127     });
128
129     //表格右键菜单
130     var contextmenu = new Ext.menu.Menu({
131         id: ‘context-menu‘,
132         items: [{
133             id: ‘context-menu-first‘,
134             rowIdx: 0,
135             colIdx: 0,
136             handler: function (m) {
137                 if ("设置" == m.text) {
138                     Ext.MessageBox.alert("提示", "设置成功");
139                 }
140             }
141         }]
142     });
143     var gridTable = Ext.create(‘Ext.grid.Panel‘, {
144         id: ‘gridTable‘,
145         region: ‘center‘,
146         layout: ‘fit‘,
147         columns: cols,
148         store: gridStore,
149         autoScroll: true,
150         selModel: {  // 光标显示的是单元格模式
151             selType: ‘cellmodel‘
152         },
153         plugins: [
154             Ext.create(‘Ext.grid.plugin.CellEditing‘, {
155                 clicksToEdit: 1 //设置单击单元格编辑
156             })
157         ],
158         listeners: {
159             ‘edit‘: function (editor, e) {
160                 e.record.commit();
161             },
162             ‘itemcontextmenu‘: function (view, record, item, index, e) {
163                 // 禁用系统默认右键菜单
164                 e.preventDefault();
165
166                 contextmenu.items.items[0].setText("设置");
167
168                 contextmenu.showAt(e.getXY());
169             }
170         },
171
172     });
173 </script>
174
175 <!-- 脚本入口 -->
176 <script type="text/javascript">
177     Ext.onReady(function () {
178         Ext.create(‘Ext.Viewport‘, {
179             id: ‘iframe‘,
180             layout: ‘border‘,
181             items: [
182                 toolbar,
183                 gridTable,
184             ]
185         });
186
187         onInit();
188     });
189 </script>
时间: 2024-10-11 23:36:51

编辑 Ext 表格(二)——— 编辑表格元素的相关文章

编辑 Ext 表格(一)——— 动态添加删除行列

一.动态增删行 在 ext 表格中,动态添加行主要和表格绑定的 store 有关, 通过对 store 数据集进行添加或删除,就能实现表格行的动态添加删除. (1) 动态添加表格的行  gridStore.add({}); (2) 动态删除表格的行 gridStore.removeAt(gridStore.count() - 1); 二.动态增删列 在 ext 表格中,动态添加列主要通过修改表格绑定的 column 元素, 通过对 column 元素集进行添加或删除,然后重新渲染表格,就能实现表

Linqpad使用(调试Linq、结合linq调试业务场景、表格内编辑数据)

linqpad是一款linq语句调试工具,功能如下: 1.直接执行linq语句并查看生成的原生sql语句 2.可结合linq+C#代码进行业务场景调试 3.表格内直接新增.修改.删除数据 4.直接执行SQL语句 官方下载网站:http://www.linqpad.net/ 版本分别: Free:免费版,提供最基本的功能 Premium:高级版,需要购买,提供智能提示功能(非常重要,可自行搜索下载) 以Sqlserver的Northwind数据库为例,讲解一下使用方法: 一.执行简单的linq语句

js实现对表格即时编辑。

当页面中存在表格时,表格里的默认内容是在代码中写入的,如果想要在页面上对表格的内容进行编辑修改,应该怎么作? 大体思路为对表格添加点击事件,在点击某个单元格时,给里面添加一个input框,然后当这个input框失去焦点时,将input框里的内容传到原来的单元格里就好了. <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>表格即时编辑效果</title

Swift - 给表格添加编辑功能(删除,插入)

1,下面的样例是给表格UITableView添加编辑功能: (1)给表格添加长按功能,长按后表格进入编辑状态 (2)在编辑状态下,第一个分组处于删除状态,第二个分组处于插入状态 (3)点击删除图标,删除对应条目 (4)点击添加图标,插入一条新数据 2,效果图           3,代码如下 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 3

swift - 表格的编辑功能(添加、删除)

表格(tableview)的确是一个很好用的控件,现在来实现一个编辑功能的实现,包含添加和删除,删除包括长按删除和左滑删除 效果图如下: 具体代码如下: 1.创建表格(这个表格有2个区,有区头和区尾),以及长按手势的方法绑定 class TenthViewController: UIViewController,UITableViewDelegate,UITableViewDataSource,UIGestureRecognizerDelegate { var tableView:UITable

EasyUI-Datagrid二维表格:多表头

人力资源管理有个做二维表格的需求,客户的需求是这样的,如图: 由于是从零开始,没有参考,我就想用easyui 做一下.分析需求,其实难点就三个:1.是将上表头的部分单元格合并.2.是在左侧显示标题.3.是页内单元格可以编辑. 对于easyui来说,单元格合并比较简单,写table时的核心的代码就两句:rowspan 和colspan.其中,rowspan是合并上下,colspan是合并左右. <span style="font-family:Verdana;font-size:18px;&

AE二次开发中几个功能速成归纳(符号设计器、创建要素、图形编辑、属性表编辑、缓冲区分析)

/* * 实习课上讲进阶功能所用文档,因为赶时间从网上抄抄改改,凑合能用,记录一下以备个人后用. * * ------------------------------------------------------------------- * * 使用前提:已搭建好AE的GIS基本框架,包括TOC.mapcontrol.toolbar拖控件,mxd.shp文件载入显示,查看图层属性表等 * * --------------------------------------------------

JavaScript之表格操作(二)创建表格病填充表格数据

//创建表格 var tableOptions = { way: "insertBefore", //insertBefore,append positionId: "domTest", //定位元素节点的ID tableId: "my-table", rows: 2, cols: 8, data: [ ['四川', '宁夏', '西藏', '北京', '上海', '台湾', '福建', '河北'], ['陕西', '天津', '山东', '江苏

前端常用功能记录(二)—datatables表格

并不是所有的后台开发都有美工和前端工程师来配合做页面,为了显示数据并有一定的美感,jQuery的DataTables插件对于像我这样的前端菜鸟来说真是雪中送炭,当然对于专业的前端开发者来说它更是锦上添花!DataTables提供了针对表格的排序.浏览器分页.服务器分页.筛选.格式化.统计等强大功能. 工作中对程序员的学习模式才深有体会,不是从入门到精通,而是从会用到了解.对于我来说,基本都是拿到一个知识先做个东西出来,再来细细品味个中的细节,然后再慢慢理解.从粗到细,从大到小,呵呵,这种"逆向学