Ext表格控件二(更新10月11,选自《掏钱学习EXT》)

七.EditorGrid

3.一切就绪,做一个保存按钮

{
   text:‘保存‘,
   handler:function(){
             var m = ds.modified.slice(0);
             var jsonArray = [];
             Ext.each(m,function(item){
                     jsonArray.push(item.data);
                       }
               );

     Ext.lib.Ajax.request(
          ‘post‘,
          ‘grid2.jsp‘,
          {success:function(response){
                        Ext.Msg.alert(‘信息‘,response.responseText,function(){
                         ds.reload();
                                    }) ;
                        }
               },
             failure:function(){
              Ext.Msg.alert(‘错误‘,‘与后台联系的时候出现你问题‘);
 },
      ‘data=‘+encodeURLComponent(Ext.encode(jsonArray))
          );
      }
}

流程是这样的,首先获得ds中修改的数据,然后放在json里头,用ajax发送到后台。ds.modified是修改后的数组,再用slice(0)进行切割,意味着从第一个元素一直切到最后一个元素,等于复制你一个数组,这样就不会对原有数组造成影响。

Ext.each(array,fn)里面有两个参数,第一个是数组,第二个是函数,启动each后,会循环数组里面的每个元素,然后一个个的传给回回调函数处理。是简化循环的一种方式。

介绍一下ds的参数prunemodifiedRecords,把这个设置为true的话,每次进行remove或者load操作时ds会自动清除modified记录,避免出现下次提交还会把那些modified信息带上的现象。

4.保证提交数据的有效性。

咱们这里设置你allowBlank:false只能限制修改已有数据的单元格,如果新建一行后里边的数据就无法检测到了。这些空白的数据也会直接被提交,这样的无效数据是不可取的。

所以我们提交之前要判断一下

for(var i =0;i<m.length;i++){
   var record = m[i];
   var fields = record.fields.keys;

  for(var j=0;j<fields.length;j++){
     var name = fields[j];
     var value = record.data[name];

     var colIndex = cm.findColumnIndex(name);
     var rowIndex = ds.indexOfId(record.id);
     var editor = cm.getCellEditor(colIndex).field;

     if(!editor.validateValue(value)){
         Ext.Msg.alert(‘提示‘,‘请确保输入的数据正确‘,function(){
              grid.startEditing(rowIndex,colIndex);
          });
          return;
    }
  }
}

我们推敲一下:

(1)首先循环m,获得每个被修改的行,var record = m[i];代表某一行,而var fields = record.fields.keys代表一共有多少列。

(2)按列循环,获得当前每个单元格。具体获得你有name列名,value单元格的数值,colIndex列号,rowIndex行号,editor这一列用到的编辑器。

(3)准备充分之后我们进行校验,用editor.isValid()方法会出现el不存在的错误,使用editor.validateValue(value)的方式进行校验,这是isValid()内部实现方法。

5.限制类型,让用户只能选择我们提供的数据

为了限制用户,我们可以用NumberField控制,使其只能输入数字,ComboBox只能输入备选几项,DateField是选择日期等等。

我们新增一些数据模型,才能更好第展示成果:

var data = [
    [1.1,1,new Date(),true],
    [2.2,2,new Date(),false],
    [3.3,0,new Date(),true],
    [4.4,1,new Date(),false],
    [5.5,1,new Date(),true]
  ];    

第一列是数字,第二列是comboBox对应的id,第三列是日期,第四列是布尔型。

现在把这5列设置各自的编辑器,第一列是咱们限制只能用数字,不能为负数,而且数字不能超过10。

var cm = new Ext.grid.ColumnModel(
      header:"数字列",
      dataIndex:"number",
      editor: new Ext.grid.GridEditor(
            new Ext.form.NumberField(
            {allowBlank:false,             allowNegative:false,             maxValue;10                  }
             )
       )
  );

使用NumberField就是只能输入数字,allowNegative:false就是不能输入减号。

第二列稍微有点儿复杂,我们先准备一个下拉列表:

var comboData =[
 [‘0‘,‘新版ext教程‘],
 [‘1‘,‘EXT在线支持‘],
 [‘2‘,‘EXT扩展‘]
];

紧接着cm部分的代码有

{
   header:‘选择列‘,
   dataIndex:‘combo‘,
   editor: new Ext.grid.GridEditor(new Ext.form.ComboBox(
          {store:new Ext.data.simpleStore(
                  fields:[‘value‘,‘text‘],
                  data:comboData),
                  emptyText:‘请选择‘,
                  mode:‘local‘,
                  triggerAction:‘all‘,
                  valueField:‘value‘,
                  displayField:‘text‘,
                  readOnly:true
})),

    renderer:function(value){
         return comboData[value][1];
       }
},

renderer这个函数我们研究研究,有些人询问EditorGrid里的ComboBox不能正常显示,其实呢这就是因为少了renderer函数,毕竟EditorGrid里的编辑器只有实际编辑的时候起作用。

余下的列名就不一一介绍了。

八.2.0版本里的1.0版本没有的控件

1.PropertyGrid属性表格

这个控件是自动拓展了EditorGridPanel,所以可以直接编辑右边的内容。

var grid = new Ext.grid.PropertyGrid({
                   title:‘属性表格‘,
                    autoHeight:true,
                    width:300,
                    renderTo:300,
                    source:{
                      ‘name‘:‘property‘,             ‘time‘:new Data(Data.parse(‘12/15/2007‘)),
                       //......
                            }});

renderTo为指定渲染id。

(1)这里我们简单讲讲对grid只读操作的处理,也是表征取消某种操作的方法:

grid.on(‘beforeedit‘,function(e){
   e.cancel = true;
    return false;
  });

(2)根据name获得value

grid.store.getById(‘name‘).get(‘value‘);

PropertyGrid没有提供方法,我们通过store来找。

(3)自定义编辑框

如果我们需要对编辑器做更加详细的配置,PropertyGrid的customEditors让我们可以指定id的那行数据进行操作。看例子:

var grid = new Ext.grid.PropertyGrid({
   titlie:"属性表格",
   autoHeight:true,
   width:300,
   renderTo:"grid",
   customEditors:{

          ‘Start Time‘:new Ext.grid.GridEditor(new Ext.form.TimeField({selectOnFocus:true}))},

    source:{
           ‘Start Time‘:‘10:00 AM‘
     }
});

customEditors和source基本一样,前头的名字一样的两组数据会自动对应抵起来。

2.交叉报表

我们要做出这样的效果,而数据是这样的:

var data = [
 [‘1‘,‘male‘,‘name1‘,‘descn1‘],
 [‘2‘,‘female‘,‘name1‘,‘descn2‘],
 [‘3‘,‘male‘,‘name1‘,‘descn3‘],
 [‘4‘,‘female‘,‘name1‘,‘descn4‘],
 [‘5‘,‘male‘,‘name1‘,‘descn5‘],
];

我们是通过Ext.data.GroupingStore对数据进行分拣的,然后提供给GridPanel。

var store = new Ext.data.GroupingStore({
         reader:reader,
         data:data,
         groupField:‘sex‘,
         sortInfo:{field:‘id‘,direction:‘asc‘}}
);

这里的reader和data还是原来那个,groupField是指定是哪一项要进行分组,还必须设置sortInfo,这个参数需要两项,field是排序的属性,direction是排序的方式,ASC正序和DESC逆序。

想看到我们需要的形式,还需要设置一个GroupingView。

var grid = new Ext.grid.GridPanel(
{    store:store,
      columns:columns,
      view:new Ext.grid.GroupingVIEW(),
      renderTo:‘grid‘
});

九.改变大小,可以拖拽的表格

不详细介绍,

var  rz = new Ext.Resizable(‘grid‘,{
       wrao:true,
       minHeight:100,
       pinned:true,
       handles:‘s‘});

rz.on(‘resize‘,grid.autoSize,grid);

 其中,s(south)是只能拖动下面的意思。

时间: 2024-10-13 21:03:48

Ext表格控件二(更新10月11,选自《掏钱学习EXT》)的相关文章

Ext表格控件一(更新10月11,选自《掏钱学习EXT》)

一.内容丰富,功能强大 Ext的功能十分强大,可以单选多选,高亮显示等等,还可以自动生成行号,支持checkbox全选,支持本地和远程的分页,渲染单元格.甚至可以在tree和grid之间进行拖拽等. 二.现在咱们就来设计一个grid吧 1.我们建立一个二维数组,为了设计一个表. 在ext里面,这个列的定义叫做ColumnModel,简称的cm就是它了.这里我们建立一个三列的表格: var cm = new Ext.grid.ColumnModel( [ {header:"编号",dat

对话框控件--2016年12月11日

打开对话框-----OpenFileDialog 1 //打开文件对话框 2 OpenFileDialog openFile = new OpenFileDialog(); 3 openFile.Title = "请选择要打开的文件"; //对话框标题 4 openFile.Multiselect = true; //设置对话框可以多选 5 openFile.InitialDirectory = @"C:\Users\tufeiax\Desktop";//获取对话框

ExtJS4.2学习(10)分组表格控件--GroupingGrid(转)

鸣谢网址:http://www.shuyangyang.com.cn/jishuliangongfang/qianduanjishu/2013-11-17/179.html --------------------------------------------------------------------------------------------- 分组表格控件在我们的开发中经常被用到,GroupingGrid分组表格就是在普通表格的基础上,根据某一列的数据显示表格中的数据分组的表格控

【ExtJs】表格控件Grid的增删改查,利用renderer让操作列actioncolumn使用文字而不是图标

在<[ExtJs]与后台数据库交互的带分页表格组件grid的查询>(点击打开链接)中介绍了Grid控件是怎么分页显示的.再加上对此控件内的数据的增加.删除.修改,就真的是大功告成了.此控件的排序,应该在后台的数据库查询语句中增加一条order by语句即可,前台的排序在分页之后,仅能对当前页进行排序,没有什么意义.下面举一个例子来说明,如果对ExtJs的表格控件Grid进行增删改查 一.基本目标 还是在数据库中有一张user表: 然后在网页中,如下图所示,通过增加.编辑.删除按钮能为这个表格控

深入浅出ExtJS 第三章 表格控件(未完)

1 3.1 表格的特性简介 2 >.Ext中的表格功能:包括排序/缓存/拖动/隐藏某一列/自动显示行号/列汇总/单元格编辑等实用功能; 3 >.表格由类Ext.grid.GridPanel定义,继承自Ext.Panel,其xtype为grid; 4 >.表格控件必须包含列(columns)定义信息,并指定表格的数据存储器(Ext.data.Store); 1 3.2 制作一个简单的表格 2 >1.列的定义是一个JSON数组,它是整个表格的列模型,应该首先创建; 3 var colu

Spread.NET 表格控件 V12.1 正式发布

Spread.NET 表格控件 V12.1 正式发布 加入动态数组,让公式运算更具效率 Spread.NET 是一个在功能和布局上与 Excel 高度类似的 .NET表格控件,目前已广泛应用于财务.预算.工程.统计等领域的信息系统开发中,通过强大的数据处理引擎和灵活的数据可视化呈现,为商业表单控制面板提供了丰富.有效的内容信息. 如今,Spread.NET 的全新版本 V12.1 已经正式发布,该版本包含了诸多功能亮点,如动态数组支持(可大幅简化计算公式,提高公式运算效率).公式追踪.交替样式支

最好的Angular2表格控件

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

更快更低耗!Spread表格控件V11 CTP发布,性能巨大提升

作为一款功能和 Excel 类似的表格控件,Spread Studio 提供灵活的定制能力和丰富的数据可视化效果,可用于在应用系统中实现表格数据录入和编辑等交互功能,涵盖 Windows Forms.ASP.NET.XAML 以及 WinRT 各平台. Spread Studio 素来以数据处理快.内存占用低.和Excel高度相似而享誉全球,被中国石油.华为.NEC.宝钢.中国农行等用户广泛应用在各领域的信息系统中. 日前,全新的Spread Studio V11CTP版本强势发布,为您呈现更惊

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

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