1.想要调整某一列在表格中的顺序,可以使用mapping(索引是从0开始的)

var store = new Ext.data.ArrayStore({
data:data,
fields:[
{name:'id',mapping:1},
{name:'name',mapping:0},
{name:'descn',mapping:2}
]}
);

2、想让表格拥有斑马线的效果:加上stripeRows:true(默认为false)

var grid = Ext.create('Ext.grid.Panel', {

  renderTo:'grid',
    stripeRows:true,

  store : store,

  columns : columns
});

3、想让 grid拥有和表格一样的border:加上 columnLines : true

var grid = Ext.create('Ext.grid.Panel', {

  renderTo:'grid',
    stripeRows:true,

   columnLines : true,

  store : store,

  columns : columns
});

4.读取数据时,使用遮罩效果,加上:loadMask:true(默认为false)

var grid = Ext.create('Ext.grid.Panel', {

  renderTo:'grid',
    stripeRows:true,

  columnLines : true,

  loadMask:true,

  store : store,

  columns : columns
});

5.禁止拖放列和改变列的宽度,把enableColumnMove和 enableResize设置为false

var grid = Ext.create('Ext.grid.Panel', {

  renderTo:'grid',
    stripeRows:true,

  columnLines : true,

  loadMask:true,

     enableColumnMove:false,

    enableResize : false,

  store : store,

  columns : columns
});

6.允许按列进行排序,只需加上sortable:true

var columns = [
{header:'编号',dataIndex:'id',sortable:true},
{header:'名称',dataIndex:'name'},
{header:'描述',dataIndex:'descn'}
];

 7.extjs中grid的中文排序

为了让表格实现中文排序的功能,我们需要重写Ext.data.Store的createComparator()函数,代码如下:

Ext.data.Store.prototype.createComparator = function(sorters){

return  function(r1,r2){

    var s = sorters[0], f=s.property;

    var v1 = r1.data[f], v2 = r2.data[f];

var result = 0;

if(typeof(v1)=="string"){

result = v1.localeCompare(v2);

   if(s.direction=='DESC'){

      result *=-1;

    }

}else{

      result = sorters[0].sort(r1,r2);

    }

var length = sorters.length;

  for(var i = 1; i<length ; i++){

s= sorters[i];

   f = s.property;

   v1= r1.data[f];

   v2 = r2.data[f];

    if(typeof(v1)=="string"){

      result = result || v1.localeCompare(v2);

      if(s.direction == 'DESC'){

      result *=-1;

      }

    }else{

      result = result||s.sort.call(this,r1,r2);  

  }

}

  return result;

};

};

以上代码重写了Ext.data.Store的comparator()函数,使其支持中文排序。可以将这段代码加到ext-all.js文件最后,或者放到HTML页面的做上面,总之是要在Ext初始化之后,实际代码调用之前执行。

8.表格的渲染

加入一个表格中有性别那一列,如果性别是女则显示绿色的,是男则显示红色的,该怎么实现呢?下面给出解决方案:

var columns = [{header:'编号',dataIndex:'id'},

            {header:'性别',dataIndex:'sex',renderer:function(value){

          if(value=='male'){

            return "<span style='color:red';font-weight:bold;'>红男</span>";

              } else{

            return "<span style='color:green';font-weight:bold;'>绿女</span>";

                } 

        }},

        {header:'名称',dataIndex:'name'},

        {header:'描述',dataIndex:'descn'}

];

可以看出在columns里增加了renderer属性,renderer的值是一个自定义函数,不过这样代码看起来显得很乱,所以做了一下修改:

function renderSex(value){

          if(value=='male'){

            return "<span style='color:red';font-weight:bold;'>红男</span><img src='user_male.png'/>";

              } else{

            return "<span style='color:green';font-weight:bold;'>绿女</span><img src='user_female.png'/>";

                } 

}

var columns =[{header:'编号',dataIndex:'id'},

            {header:'性别',dataIndex:'sex',renderer:renderSex}},

        {header:'名称',dataIndex:'name'},

        {header:'描述',dataIndex:'descn'}

];

9.表格中加复选框

(1)首先创建一个sm,也就是CheckboxModel(),代码如下:

var sm = new Ext.selection.CheckboxModel({checkOnly:true}); 

  var grid = Ext.create('Ext.grid.Panel', {

    renderTo:'grid',

    store : store,

    columns : columns,

    selModel:sm
  });

10.如何得到表格选中的数据

var selected = Ext.getCmp("IdeifGrid").getSelectionModel().selected;  //其中IdeifGrid是gridPanel的id

var selected = grid.getSelectionModel().selected;//其中grid是var的一个参数

for(var i=0;i<selected.getCount();i++){

 var record = selected.get(i);

 Ext.Msg.alert('提示',record.get("id")+","+record.get("name")+","+record.get("descn"));

};

 11.从数据库读取数据store定义:

var URL_Path= "ideIf/queryAll";

var store = Ext.create('Ext.data.Store', {
fields : [ 'ideNm', 'ideNo','opt' ],
proxy : {
type : 'ajax',
url : URL_Path,
reader : {
root : 'items',// JSON数组对象名
totalProperty : 'totalCount'// 数据集记录总数
}
},
pageSize : 15, // 设置每个页面有十条数据
autoLoad : false
});

12.数据较多,实现表格的分页:(如果想让分页工具条显示在顶部,可以讲bbar换成tbar)

var toolbarPaging=Ext.create('Ext.PagingToolbar',
{
autoDestroy : false,
store : store,
displayInfo : true,
beforePageText : '第',
afterPageText : '页',
displayMsg : '显示 {0} - {1} 条,共计 {2} 条',
emptyMsg : "没有数据显示",
plugins : [
new Ext.ux.plugin.PagingToolbarResizer({
options : [ 15, 30, 45, 60, 75 ],
prependCombo : false
}),
new Ext.ux.ProgressBarPager({ progBarWidth : 198 })
]
}) ;

在grid中加入bbar属性:

var grid = Ext.create('Ext.grid.Panel', {

    renderTo:'grid',

    store : store,

    columns : columns,

    selModel:sm,

           bbar:toolbarPaging

  });

13.表格分页之后有可能第二页的序号错乱,解决方案如下:

1.写一个渲染表格的方法,如下:

function renderNum(value,metadata,record,rowIndex){
var record_start = 0;
var store = store;
//store当前页数
var currentPage = store.currentPage;
//store每页显示数
var pageSize = store.pageSize;
if(pageSize>1){
record_start = (currentPage-1)*pageSize;
}
return record_start + 1 + rowIndex;
}

2.在column中的序号列加上:renderer:renderNum

var columns = [
{text:'编号',dataIndex:'id',xtype : 'rownumberer',renderer:renderNum},
{header:'名称',dataIndex:'ideNm'},
{header:'描述',dataIndex:'ideNo'},
{text:'操作',dataIndex:'opt',renderer:function(){
return "<a>操作</a>";
}}
];

14.可编辑表格控件

1.加入可编辑控

var grid = Ext.create('Ext.grid.Panel', {

    renderTo:'grid',

    store : store,

    columns : columns,

    selModel:sm,

           bbar:toolbarPaging,

    plugins:[
        Ext.create('Ext.grid.plugin.CellEditing',{
            clickToEdit:1
        })
]

  });

2.在columns中加入editor:{allowBlank:false},如下:

var columns = [
{

text:'编号',

dataIndex:'id',

xtype : 'rownumberer',

renderer:renderNum,

editor:{allowBlank:false}

},
{header:'名称',dataIndex:'ideNm'},
{header:'描述',dataIndex:'ideNo'},
{text:'操作',dataIndex:'opt',renderer:function(){
return "<a>操作</a>";
}}
];

 15.添加一行/删除一行

1.先在grid中加上tbar

  tbar:['-',{

    text:'添加一行',

    handler:function(){

    var p = {

      id:'',

      ideNo:'',

      ideNm:'',

      opt:''

};

    store.insert(0,p);

}

},'-',{

    text:'删除一行',

    handler:function(){

    Ext.Msg.confirm('信息',‘确定要删除吗?’,function(btn){

      if(btn=='yes'){

          var sm = grid.getSelectionModel();

          var record = sm.getSelection()[0];

          store.remove(record);      

}

})

  }

}]

16.既然15已经进行了添加和删除表格数据,这时我们需要对表格的数据进行保存,怎么保存呢,下面给出方法:

{

  text:'保存',

  handler:function(){

    var m = store.getModifiedRecords().slice(0);//slice(start,(end));遍历数组

    var jsonArray = [];

    Ext.each(m,function(item){

      jsonArray.push(item.data);  

    });

    Ext.Ajax.request({

      method : 'POST',

      url:'11_03.jsp',

      success:function(response){

          Ext.Msg.alert('信息',response.responseText,function(){

            store.reload();  

      })

      },

      failure:function(){

        Ext.Msg.alert("错误","与后台交互的时候出现了问题");  

    },

    params:'data='+encodeURIComponent(Ext.encode(jsonArray))

    })

  }

}

17.可编辑表格怎么控制输入数据的类型:下面给出方法:

eg:表格有四列,第一列只能填写数字,第二列是下拉框,第三列是日期,第四列是单选框(下面的store是写死的数据)

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

var columns = [{

  header:'数字列',

  dataIndex:'number',

  editor :  new Ext.form.NumberField({

    allowBlank : false,//不允许为空

    allowNegative : false,//不允许输入负号

    maxVlue : 10 //最大值

},

{

  header:'选择列',

  dataIndex:'combo',

  editor :  new Ext.form.ComboBox({

    store : new Ext.data.SimpleStore({

      fields : ['value','text'],

      data : comboData

      }),

    emptyText : '请选择',

    mode : 'local' , 

    triggerAction : 'all' , 

    valueField : 'value',

    displayField : 'text',

    editable : false

})  ,

  renderer : function(value){

    return comboData[value][1];

}

)   

},{

    header : '日期列',

    dataIndex : 'data',

    editor : new Ext.form.DateField({

      format : 'Y-m-d',

      minValue : '2007-12-14',

      disabledDays:[0,6],//周六周日不能选择

      disabledDaysText : '只能选择工作日'  

}),

    renderer : function(value){

      return Ext.Data.format(value,"Y-m-d");

  }

},{

    header : '判断列',

    dataIndex : 'check',

    editor : new form.Checkbox({

      allowBlank : false  

}),

    renderer : function(value){

      return value ? '是' : '否';    

}]

store中的数据从数据库中获取

var store = new Ext.data.ArrayStore({
fields : [ 'cdNm', 'cdVl' ],
proxy : {
type : 'ajax',
url : "code/query/typ/IDE_STS",
params : {
_method : 'get'
},
reader : {
root : 'items'
}
},
autoLoad : false
});

设置默认值:

store.load({
callback : function(records, options, success) {
//ideStore.insert(0,[{cdNm : '全部',cdVl : ''}])
ideStore.each(function(record) { //加载完毕执行的回调函数
if (record.get('cdNm') == "启用") { //机构状态默认值为冻结
Ext.getCmp('IDESts').setValue(record);
}
});
},
scope : store, //指定回调函数执行时的作用域
add : false //为true时,load()得到的数据会添加在原来的store数据末尾,否则会先清除之前的数据再将得到的数据添加到store中
});

extjs学习(关于grid)的更多相关文章

  1. ExtJS学习(三)Grid表格

    表格说明 Ext中的表格功能非常强大,包括排序.缓存.拖动.隐藏某一列.自动显示行号.列汇总.单元格编辑等实用功能.表格由类Ext.grid.GridPanel定义,继承自Ext.Panel,其xty ...

  2. ExtJs学习之Window

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  3. extjs 学习笔记(二)

    EXTJS实用开发指南 1. 要使用ExtJS 框架的页面中一般包括下面几句: <link rel="stylesheet" type="text/css" ...

  4. ExtJS 4.2 Grid组件的单元格合并

    ExtJS 4.2 Grid组件本身并没有提供单元格合并功能,需要自己实现这个功能. 目录 1. 原理 2. 多列合并 3. 代码与在线演示 1. 原理 1.1 HTML代码分析 首先创建一个Grid ...

  5. ExtJs学习笔记之学习小结LoginDemo

    ExtJs学习小结LoginDemo 1.示例:(登录界面) <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  6. ExtJs 学习之开篇(三)Ext.grid.Panel表格中的处理

    Ext.grid.Panel Ext.create('Ext.grid.Panel',{        title:'测试表格',        width:400,        height:20 ...

  7. Extjs 学习笔记1

    学习笔记 目   录 1 ExtJs 4 1.1 常见错误处理 4 1.1.1 多个js文件中有相同的控件,切换时无法正常显示 4 1.1.2 Store的使用方法 4 1.1.3 gridPanel ...

  8. Extjs 4.2 Grid增删改及后台交互(Java)

    上次发了Easyui Datagrid的增删改查的使用学习记录后一直想整理下基于Extjs4.2的Grid学习使用记录.苦于抽不出时间,一直拖到现在.不得不说,Extjs确实很强大,新版的Neptun ...

  9. ExtJS学习(四)EditorGrid可编辑表格

    操作表格有一种需求,要操作表格需要动态的添加内容,删除内容以及双击的时候进入编辑状态.这个时候怎么办呢,看具体的实现吧. 双击点击的时候可以单元格的操作. 代码: <!DOCTYPE html& ...

随机推荐

  1. python之GUI编程(二)win10 64位 pygame的安装

    pygame的下载网址: http://www.pygame.org/download.shtml 我下载了第一个 很显然,安装的时候出现了如图中的尴尬,更改了安装目录后,在Python shell中 ...

  2. 关于checkbox全选与反选的问题

    在一组checkbox中常有这样的需求,选择全选按钮,所有的选项必须全选上,当再次点击时,则所有的按钮必须反选,当点击一组checkbox时,只有有一个不选上,则按钮不选中,当所有的按钮全部选上时,此 ...

  3. JS定时程序,设定一个一直刷新,又时间间隔的js,读取当前的时间并显示

    <!doctype html><html><head><meta charset="utf-8"><title>无标题文 ...

  4. RandomAccessFile使用小结

    本文是基于Linux环境运行,读者阅读前需要具备一定Linux知识 RandomAccessFile是Java输入/输出流体系中功能最丰富的文件内容访问类,既可以读取文件内容,也可以向文件输出数据.与 ...

  5. Des加解密算法

    class DesHelper    {        /// <summary>        /// DES加密方法        /// </summary>       ...

  6. Android之TextView灵活使用(转载)

    在项目中有无遇到过这样一种程况,例如文字"王明今年10岁了", 但是数字10是从网络返回的数据, 而你又想把这个文字写在xml中, 过往我的做法是分成3个TextView, 实现愚 ...

  7. IO调度算法

    简介: 当向设备写入数据块或是从设备读出数据块时,请求都被安置在一个队列中等待完成. 每个块设备都有它自己的队列. I/O调度程序负责维护这些队列的顺序,以更有效地利用介质.I/O调度程序将无序的I/ ...

  8. Modern Operating Systems(Ⅰ)——2014.12.15

    进程   进程模型     进程就是一个正在执行的程序的实例  值得注意的是,若一个程序运行了两遍,则算作两个进程 创建进程 在通用系统中,有四种主要事件导致进程的创建 ①系统的初始化 ②执行了 正在 ...

  9. [转]Redmine 配置163邮箱

    redmine的邮件发送功能还是很有用的.像项目有更新啦,任务分配啦,都能邮件发送的相关责任人.我自己在linux服务器上安装并启动了redmine后,邮件一直发送了不了.查了网上的资料,都是讲修改下 ...

  10. 平板上的js和电脑上js的不同之处

    一.事件 1.平板上没有:onmousedown,onmouseup,onmousemove等事件,由ontouchstart,ontouchmove,ontounchend替代 2.位置问题:平板上 ...