`
finally_m
  • 浏览: 69089 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(十一)可编辑表格EditorGridPanel

    博客分类:
  • AJAX
阅读更多

(2) 可编辑表格EditorGridPanel
可编辑表格是指可以直接在表格的单元格对表格的数据进行编辑,ExtJS 中的可编辑表格由类Ext.grid.EditorGridPanel 表示,xtype 为editorgrid。使用EditorGridPanel 与使用普通的GridPanel 方式一样,区别只是在定义列信息的时候,可以指定某一列使用的编辑即可,下面来看一个简单的示例。
Ext.onReady(function(){
 var data=[
  {id:1,name:'小王',email:'xiaowang@yahoo.com',sex:'男',bornDate:'1991-4-4'},
  {id:1,name:'小李',email:'xiaoli@yahoo.com',sex:'男',bornDate:'1992-5-6'},
  {id:1,name:'小兰',email:'xiaoxiao@yahoo.com',sex:'女',bornDate:'1993-3-7'}
 ];
 var store=new Ext.data.JsonStore({
  data:data,
  fields:["id","name","sex","email",{name:"bornDate",type:"date",dateFormat:"Y-n-j"}]
 });
 var colM=new Ext.grid.ColumnModel([
  {header:"姓名",dataIndex:"name",sortable:true,
   editor:new Ext.form.TextField()},
  {header:"性别",dataIndex:"sex"},
  {header:"出生日期",dataIndex:"bornDate",width:120,
   renderer:Ext.util.Format.dateRenderer('Y年m月d日')},
  {header:"电子邮件",dataIndex:"email",sortable:true,
   editor:new Ext.form.TextField()}
 ]);
 var grid = new Ext.grid.EditorGridPanel({
  renderTo:"mydiv",
  title:"学生基本信息管理",
  height:200,
  width:600,
  cm:colM,
  store:store,
  autoExpandColumn:3
 });
});

上面的程序首先定义了一个包含学生信息的对象数组,然后创建了一个JsonStore,在创建这个store 的时候,指定bornDate 列的类型为日期date 类型,并使用dateFormat 来指定日期信息的格式为"Y-n-j",Y 代表年,n 代表月,j 代表日期。定义表格列模型的时候,对于“姓名”及“电子邮件”列我们使用editor来定义该列使用的编辑器,这里是使用Ext.form.TextField,最后使用new Ext.grid.EditorGridPanel(…)来创建一个可编辑的表格。执行上面的程序可以生成一个表格,双击表格中的“姓名”、或“电子邮件”单元格中的信息可以触发单元格的编辑,可以在单元格的文本框中直接编辑表格中的内容,修改过的单元格会有特殊的标记。

Ext的日期格式说明:
格式 说明  例子
d 月里面的日期,2位,不足前面补0  01-31
D  星期里面的每天的缩写  Mon - Sun
j  月里面的日期,前面不补0  1-31
l  星期的完整写法 Sunday to Saturday
N  ISO-8601的星期表示法 1=星期一,7是星期日
S  英语习惯的月内每天的2位的前缀 st, nd, rd or th.
w  星期的数字表示  0=星期日,6等星期六
Z  在年内的第几天,从0开始  0-364,闰年是365
W  ISO-8601格式的,年内的星期数,从星期一开始  01-53
F  月份的完整文字表示 January to December
m  月份的2位数字表示,不足前面补零  01-12
M  月份的缩写文字表示  Jan to Dec
n  月份的数字表示,不补零  1-12
t  月份的最大天数 28-31
L  是否为闰年  1是闰年,0则不是
o  ISO-8601的年份表示,和Y相同,但是如果星期(W)输入前一年或者后一年,则替换为那个年 1998,2004
Y  4位的年份表示  2008
y  2位的年份表示 98,08
a  小写的上下午表示 am pm
A  大写的上下午  AM PM
g  12小时制,不补零 1-12
G  24小时制,不补零 0-23
h  12小时制,2位,不足补零 01-12
H  24小时制,2位,不足补零 00-23
i  分钟,2位,不足补零 00-59
s  秒,2位,不足补零 00-59
u  毫秒,前面补零  001 999

为了能编辑“性别”及“出生日期”列,同样只需要在定义该列的时候指定editor 即可。由于出生日期是日期类型,因此我们可以使用日期编辑器来编辑,“性别”一列的数据不应该让用户直接输入,而应该是通过下拉框进行选择。日期编辑器可以直接使用Ext.form.DateField组件,下拉选择框编辑器可以使用Ext.form.ComboBox 组件,下面是实现对性别及出生日期等列信息编辑的代码:
Ext.onReady(function(){
 var data=[
  {id:1,name:'小王',email:'xiaowang@yahoo.com',sex:'男',bornDate:'1991-4-4'},
  {id:1,name:'小李',email:'xiaoli@yahoo.com',sex:'男',bornDate:'1992-5-6'},
  {id:1,name:'小兰',email:'xiaoxiao@yahoo.com',sex:'女',bornDate:'1993-3-7'}
 ];
 var store=new Ext.data.JsonStore({
  data:data,
  fields:["id","name","sex","email",{name:"bornDate",type:"date",dateFormat:"Y-n-j"}]
 });
 var colM=new Ext.grid.ColumnModel([
  {header:"姓名",dataIndex:"name",sortable:true,
   editor:new Ext.form.TextField()},
  {header:"性别",dataIndex:"sex",
   editor:new Ext.form.ComboBox({transform:"sexList",
   triggerAction: 'all',
   lazyRender:true})},
  {header:"出生日期",dataIndex:"bornDate",width:120,
   renderer:Ext.util.Format.dateRenderer('Y年m月d日'),
   editor:new Ext.form.DateField({format:'Y年m月d日'})},
  {header:"电子邮件",dataIndex:"email",sortable:true,
   editor:new Ext.form.TextField()}
 ]);
 var grid = new Ext.grid.EditorGridPanel({
  renderTo:"mydiv",
  title:"学生基本信息管理",
  height:200,
  width:600,
  cm:colM,
  store:store,
  autoExpandColumn:3,
  clicksToEdit:1
 });
});


  <div id="mydiv"></div>
 <select id="sexList">
  <option>男</option>
  <option>女</option>
 </select>

注意在定义EditorGridPanel 的时候,我们增加了一个属性“clicksToEdit:1”,表示点击一次单元格即触发编辑,因为默认情况下该值为2,需要双击单元格才能编辑。为了给ComboBox 中填充数据,我们使用设置了该组件的transform 配置属性值为sexList,sexList是一个传统的<select>框。
执行上面的程序,我们可以得到一个能对表格中所有数据进行编辑的表格了。点击上面的“性别”一列的单元格时,会出现一个下拉选择框,点击“出生日期”一列的单元格时,会出现一个日期数据选择框。

那么如何保存编辑后的数据呢?答案是直接使用afteredit 事件。当对一个单元格进行编辑完之后,就会触发afteredit 事件,可以通过该事件处理函数来处理单元格的信息编辑。比如在blog 示例中,当我们编辑一个日志目录的时候,需要把编辑后的数据保存到服务器。
   Ext.onReady(function(){
  var data=[
   {id:1,name:'小王',email:'xiaowang@yahoo.com',sex:'男',bornDate:'1991-4-4'},
   {id:1,name:'小李',email:'xiaoli@yahoo.com',sex:'男',bornDate:'1992-5-6'},
   {id:1,name:'小兰',email:'xiaoxiao@yahoo.com',sex:'女',bornDate:'1993-3-7'}
  ];
  var store=new Ext.data.JsonStore({
   data:data,
   fields:["id","name","sex","email",{name:"bornDate",type:"date",dateFormat:"Y-n-j"}]
  });
  var colM=new Ext.grid.ColumnModel([
   {header:"姓名",dataIndex:"name",sortable:true,
    editor:new Ext.form.TextField()},
   {header:"性别",dataIndex:"sex",
    editor:new Ext.form.ComboBox({transform:"sexList",
    triggerAction: 'all',
    lazyRender:true})},
   {header:"出生日期",dataIndex:"bornDate",width:120,
    renderer:Ext.util.Format.dateRenderer('Y年m月d日'),
    editor:new Ext.form.DateField({format:'Y年m月d日'})},
   {header:"电子邮件",dataIndex:"email",sortable:true,
    editor:new Ext.form.TextField()}
  ]);
  var grid = new Ext.grid.EditorGridPanel({
   renderTo:"mydiv",
   title:"学生基本信息管理",
   height:200,
   width:600,
   cm:colM,
   store:store,
   autoExpandColumn:3,
   clicksToEdit:1
  });
  //给可编辑的表格(grid为已定义的表格)添加afteredit事件
  grid.on("afteredit",function(e){
   //当前修改的记录
   var rec = e.record;
   var name = rec.get("name");
   var sex = rec.get("sex");
   var bornDate = rec.get("bornDate");
   var email = rec.get("email");
   //简写方式:Ext.Msg.alert(....);
   Ext.MessageBox.alert(
"修改",name + " " + sex + " "
+ Ext.util.Format.date(bornDate,"Y-n-j") + " " + email);
  })
 });


    <div id="mydiv"></div>
 <select id="sexList">
  <option>男</option>
  <option>女</option>
 </select>

分享到:
评论
2 楼 finally_m 2010-02-08  
谢谢提醒!
1 楼 setfsun2009 2010-02-02  
不知楼主注意没,在火狐下的日期控件有问题!

相关推荐

    可编辑表格Ext.grid.EditorGridPanel

    title: '可编辑表格', // ... }); // 添加到容器或页面 var container = Ext.getCmp('someContainerId'); container.add(grid); grid.render(); ``` 以上就是关于Ext.grid.EditorGridPanel的基本介绍和使用方法...

    ExtJS 2.0实用简明教程

    22)可编辑表格EditorGridPanel 23)窗口基本应用 24)窗口分组 25)对话框 26)与服务器交互 27)Record 28)Store 29)TreePanel基本使用 30)使用树控件TreeNode 31)使用树控件TreeLoader 32)自定义TreeLoader

    Html Web模拟Excel电子表格

    当用户编辑表格时,JavaScript会捕获这些更改,并通过Ajax异步请求将更新发送到服务器。服务器端接收到请求后,更新数据存储,并可能返回确认信息,确保数据的一致性。 为了实现类似Excel的公式计算功能,可以使用...

    Ext表格控件和树控件

    title: '可编辑表格', width: 600, height: 300, store: store, columns: [ { header: "项目名称", dataIndex: "name", editor: 'textfield' }, { header: "开发团队", dataIndex: "organization", editor: '...

    Extjs EditorGridPanel中ComboBox列的显示问题

    在EXTJS中,EditorGridPanel是一种可编辑的表格组件,它允许用户直接在表格单元格内编辑数据。然而,当在EditorGridPanel中嵌入ComboBox(下拉选择框)作为编辑器时,可能会遇到一个问题,即ComboBox显示的不是其...

    ExtJS2.0实用简明教程

    **八、可编辑表格EditorGridPanel** `EditorGridPanel`是GridPanel的一个扩展,它允许用户直接在表格单元格内编辑数据。这对于数据录入和管理非常有用,可以结合各种编辑器实现复杂的数据输入需求。 **九、Ext类库...

    GridPanel属性详解

    - **描述**:`editable`控制列是否可编辑;`editor`定义了列的编辑器;`xtype`定义了列的渲染器类型。 #### 五、Ext.grid.ColumnModel 配置项 最后,让我们了解一下`Ext.grid.ColumnModel`的关键配置项: 1. **...

    ext3 gridRowEditor本地数据简单demo,有注释

    5. Columns:定义GridPanel的列,包括字段名、显示文本、宽度等属性,以及是否可编辑。 6. Data配置:在本地数据模式下,直接将数据对象赋值给Store的"data"属性。 通过对这个demo的学习,你可以了解如何在ExtJS 3....

    ext的edittreegrid实现

    2. **定义ColumnModel**:设置EditorGridPanel的列模型,定义可编辑的列。每个列应关联到树节点的一个属性,并配置适当的editor,如TextField、ComboBox等。 3. **添加CellEditing插件**:EXT JS的CellEditing插件...

    treePanel与gridPanel技术实现页面的增删改查

    - GridPanel通过`ColumnModel`定义列的显示和行为,包括列宽、对齐方式、是否可编辑等。 - 表格中的行可以被选中,通过监听`cellclick`或`rowselect`事件,可以响应用户的选择操作。 - GridPanel的编辑功能通常...

    ExtJs2.0简明教程

    #### 7.2 可编辑的表格EditorGridPanel EditorGridPanel是一种特殊的GridPanel,它允许用户直接在表格中编辑数据。这对于需要频繁更新数据的应用来说非常方便。 #### 7.3 与服务器交互 ExtJS提供了强大的数据处理...

    extjs xtype

    10. `editorgrid` - `Ext.grid.EditorGridPanel`:可编辑的表格,允许用户直接在表格中修改数据。 11. `grid` - `Ext.grid.GridPanel`:标准的表格组件,用于展示数据。 12. `paging` - `Ext.PagingToolbar`:分页...

    extjs的快速入门教程

    - **可编辑的表格(EditorGridPanel)**: - 在表格的基础上增加了编辑功能,用户可以直接修改数据。 #### 七、与服务器交互 - **数据存储(Store)**: - 存储和管理数据集,支持本地数据和远程数据加载。 - **...

    EXT的基础文档

    3. **表单组建**:EXTJS提供了一系列用于构建表单的组件,如Editor(编辑器)、EditorGridPanel(可编辑的表格)、GridPanel(表格)、DatePicker(日期选择器)等。这些组件使得在Web上处理用户输入数据变得简单。 ...

    EXT_JS实用开发指南_个人整理笔记.docx

    - **表单及元素组件**:Editor(编辑器)、EditorGridPanel(可编辑表格)等。 EXT_JS的强项在于它的组件化设计,使得开发者能够快速地搭建复杂的UI界面,并且提供了丰富的功能和良好的性能。通过对EXT_JS的学习和...

    EXT2.0 GRID 示例

    2. **列配置**:GRID的列可以通过配置对象定制,包括列宽、标题、对齐方式、是否可排序、可编辑等属性。还可以添加自定义的列渲染器来改变数据显示样式。 3. **行编辑**:EXT GRID支持行内编辑,用户可以直接在表格...

    ExtJS下拉列表树控件

    `EditorGridPanel` 是一个可编辑的表格组件,允许用户直接在表格中修改数据,这与下拉列表树控件一样,都是提升用户体验的重要工具。 通过以上介绍,我们可以了解到ExtJS如何实现下拉列表树控件,并理解其背后的...

Global site tag (gtag.js) - Google Analytics