Ext.widgets-grid(2)

Ext.grid.EditorGridPanel
可编辑数据表格
Config {
clicksToEdit : Number    //点几次开始编辑,默认为2
}

方法
EditorGridPanel()
构造,应为 EditorGridPanel(Object config)
startEditing( Number rowIndex, Number colIndex ) : void
stopEditing() : void
开始停止编辑

事件
afteredit : ( Object e )
beforeedit : ( Object e )
validateedit : ( Object e )

下面我们扩展一下刚才的示例应用一下EditorGridPanel


 

Ext.widgets-grid(2)           // 定义数组
Ext.widgets-grid(2)
var  arr = [
Ext.widgets-grid(2)    [
' Bill ' ' Gardener ' , ' 2007-01-02 ' , - 10 , true ],
Ext.widgets-grid(2)    [ 
' Ben ' ' Horticulturalist ' , ' 2007-01-03 ' , - 20.1 , false ],
Ext.widgets-grid(2)    [
' ' ' Gardener ' , ' 2007-02-02 ' , 0 , true ],
Ext.widgets-grid(2)    [
' ' ' Gardener ' , ' 2007-01-04 ' , 13 , false ],
Ext.widgets-grid(2)    [ 
' ' ' Horticulturalist ' , ' 2007-01-05 ' , 15.2 , false ]
Ext.widgets-grid(2)    ];
Ext.widgets-grid(2)
var  reader  =   new  Ext.data.ArrayReader(
Ext.widgets-grid(2)
Ext.widgets-grid(2)   
{} ,
Ext.widgets-grid(2)
// 定义数组到record的映射关系
Ext.widgets-grid(2)
   [
Ext.widgets-grid(2)    
{name: 'name'} ,         
Ext.widgets-grid(2)    
{name: 'occupation', mapping: 1} ,
Ext.widgets-grid(2)    
{name:'date',type: 'date',dateFormat: 'Y-m-d'} // 用指定的格式转换日期
Ext.widgets-grid(2)
     {name:'float',type:'float'} ,
Ext.widgets-grid(2)    
{name:'bool',type:'bool'}
Ext.widgets-grid(2)   ]
Ext.widgets-grid(2));
Ext.widgets-grid(2)
// 生成元数据
Ext.widgets-grid(2)
  var  store = new  Ext.data.Store( {
Ext.widgets-grid(2)    reader:reader
Ext.widgets-grid(2)    }
);
Ext.widgets-grid(2)store.loadData(arr);
Ext.widgets-grid(2)
Ext.widgets-grid(2)
Ext.widgets-grid(2)
// 自定义可编辑列,从ext的示例抄的,但是却要init郁闷
Ext.widgets-grid(2)
 Ext.grid.CheckColumn  =   function (config) {
Ext.widgets-grid(2)    Ext.apply(
this, config);
Ext.widgets-grid(2)    
if(!this.id){
Ext.widgets-grid(2)    
this.id = Ext.id();
Ext.widgets-grid(2)    }

Ext.widgets-grid(2)    
this.renderer = this.renderer.createDelegate(this);
Ext.widgets-grid(2)}
;
Ext.widgets-grid(2)
// 重写了三个方法,捕捉mousedown修改数据
Ext.widgets-grid(2)
Ext.grid.CheckColumn.prototype  = {
Ext.widgets-grid(2)init : 
function(grid){
Ext.widgets-grid(2)    
this.grid = grid;
Ext.widgets-grid(2)    
this.grid.on('render'function(){
Ext.widgets-grid(2)    
var view = this.grid.getView();
Ext.widgets-grid(2)    view.mainBody.on(
'mousedown'this.onMouseDown, this);
Ext.widgets-grid(2)    }
this);
Ext.widgets-grid(2)}
,
Ext.widgets-grid(2)
Ext.widgets-grid(2)onMouseDown : 
function(e, t){
Ext.widgets-grid(2)    
Ext.widgets-grid(2)    
if(t.className && t.className.indexOf('x-grid3-cc-'+this.id) != -1){
Ext.widgets-grid(2)    e.stopEvent();
Ext.widgets-grid(2)    
var index = this.grid.getView().findRowIndex(t);
Ext.widgets-grid(2)    
var record = this.grid.store.getAt(index);
Ext.widgets-grid(2)    record.set(
this.dataIndex, !record.data[this.dataIndex]);
Ext.widgets-grid(2)    }

Ext.widgets-grid(2)}
,
Ext.widgets-grid(2)
Ext.widgets-grid(2)renderer : 
function(v, p, record){
Ext.widgets-grid(2)    p.css 
+= ' x-grid3-check-col-td';
Ext.widgets-grid(2)    
return '<div class="x-grid3-check-col'+(v?'-on':'')+' x-grid3-cc-'+this.id+'">&#160;</div>';
Ext.widgets-grid(2)}

Ext.widgets-grid(2)}

Ext.widgets-grid(2)
Ext.widgets-grid(2)
// 绑定到bool字段
Ext.widgets-grid(2)
var  checkColumn = new  Ext.grid.CheckColumn( {
Ext.widgets-grid(2)   header: 
"布尔值",
Ext.widgets-grid(2)   dataIndex: 
'bool'
Ext.widgets-grid(2)}
);
Ext.widgets-grid(2)
Ext.widgets-grid(2)
Ext.widgets-grid(2)
/*
Ext.widgets-grid(2)    现在配置列信息,为了本地化日期选择器,请包含ext-lang-zh_CN.js,并修改Date.dayNames = ["日","一","二","三","四","五","六"];
Ext.widgets-grid(2)    在Ext.apply(Ext.DatePicker.prototype, {...})中加入okText:"确定",cancelText:"取消";
Ext.widgets-grid(2)
*/

Ext.widgets-grid(2)
var  col = new  Ext.grid.ColumnModel([
Ext.widgets-grid(2)    
new  Ext.grid.RowNumberer( {header:'序号',width:30} ),
Ext.widgets-grid(2)    
{header:'姓名',sortable: true,dataIndex:'name'} ,
Ext.widgets-grid(2)    
{header:'职业',sortable: true,dataIndex:'occupation'} ,
Ext.widgets-grid(2)    
{   
Ext.widgets-grid(2)    id:
'datacol',
Ext.widgets-grid(2)    header:
'日期',
Ext.widgets-grid(2)    sortable:
true,
Ext.widgets-grid(2)    dataIndex:
'date',renderer: Ext.util.Format.dateRenderer('Y年m月d日'),//格式化显示
Ext.widgets-grid(2)
    editor:new Ext.form.DateField()
Ext.widgets-grid(2)     }
,
Ext.widgets-grid(2)    
{header:'数值',sortable:true,dataIndex:'float',renderer:formatFloat,align: 'right',editor:new Ext.form.NumberField()} ,   // 自定义显示方式,右对齐
Ext.widgets-grid(2)
    checkColumn  // 这个"选择框列"看起来的确漂亮些,其实是通过修改背景图片实现的
Ext.widgets-grid(2)
]);
Ext.widgets-grid(2)
Ext.widgets-grid(2)
Ext.widgets-grid(2)
Ext.widgets-grid(2)
// 配置视图信息
Ext.widgets-grid(2)
var  view = new  Ext.grid.GridView( {forceFit:true,sortAscText :'正序', sortDescText :'倒序'} );
Ext.widgets-grid(2)view.columnsText
= ' 列显示/隐藏 ' ;
Ext.widgets-grid(2)
Ext.widgets-grid(2)
// 现在我们看看可编辑的数据表格能用了吗        
Ext.widgets-grid(2)
var  grid = new  Ext.grid.EditorGridPanel( {
Ext.widgets-grid(2)    el:Ext.getBody(),
Ext.widgets-grid(2)    height:
200,
Ext.widgets-grid(2)    width:
400,
Ext.widgets-grid(2)    store:store,
Ext.widgets-grid(2)    cm:col,
Ext.widgets-grid(2)    view:view
Ext.widgets-grid(2)    }
);    
Ext.widgets-grid(2)
// 为什么原例不需要init?
Ext.widgets-grid(2)
checkColumn.init(grid);
Ext.widgets-grid(2)grid.render();
Ext.widgets-grid(2)
Ext.widgets-grid(2)
function  formatFloat(val) {
Ext.widgets-grid(2)    
var bgcolor;
Ext.widgets-grid(2)    
if(val>0){
Ext.widgets-grid(2)    bgcolor
='#FF0000';
Ext.widgets-grid(2)    }
else if(val<0){
Ext.widgets-grid(2)    bgcolor
='#00FF00';
Ext.widgets-grid(2)    }

Ext.widgets-grid(2)    
else{
Ext.widgets-grid(2)    bgcolor
='#000000';
Ext.widgets-grid(2)    }

Ext.widgets-grid(2)    
return( ['<span style="color:',bgcolor,'">',val,'</span>'].join(''));
Ext.widgets-grid(2)}



Ext.grid.PropertyGrid
属性表格.继承自EditorGridPanel,用习惯ide的用户都会喜欢这个简单的属性表格,

config{
     customEditors : Object    //自定义属性编辑器
      source : Object    //数据源
}

方法
PropertyGrid( Object config )
构造

getSource() : Object
setSource( Object source ) : void
得到和设置数据源

事件
beforepropertychange : ( Object source, String recordId, Mixed value,
propertychange : ( Object source, String recordId, Mixed value, Mixed

同样用一个简单的示例来完成PropertyGrid的学习
        

Ext.widgets-grid(2) var  grid = new  Ext.grid.PropertyGrid( {
Ext.widgets-grid(2)    el:Ext.getBody()
Ext.widgets-grid(2)    ,height:
200
Ext.widgets-grid(2)    ,width:
400
Ext.widgets-grid(2)    ,viewConfig : 
{forceFit:true}
Ext.widgets-grid(2)    ,customEditors:
{
Ext.widgets-grid(2)        
'年龄':new Ext.grid.GridEditor(new Ext.form.NumberField())
Ext.widgets-grid(2)    }

Ext.widgets-grid(2)    ,source:
{
Ext.widgets-grid(2)        
'姓名':'blackant'
Ext.widgets-grid(2)        ,
'年龄':100
Ext.widgets-grid(2)    }

Ext.widgets-grid(2)}
);
Ext.widgets-grid(2)       
Ext.widgets-grid(2)
Ext.widgets-grid(2)grid.source[
' 性别 ' ] = ' ' ;
Ext.widgets-grid(2)grid.customEditors[
' 性别 ' ] = new  Ext.grid.GridEditor( new  Ext.form.ComboBox( {
Ext.widgets-grid(2)        editable:
false
Ext.widgets-grid(2)        ,triggerAction: 
'all'
Ext.widgets-grid(2)        ,store: 
new Ext.data.SimpleStore({
Ext.widgets-grid(2)            fields: [
'gender'],
Ext.widgets-grid(2)            data : [[
''],['']]
Ext.widgets-grid(2)        }
)
Ext.widgets-grid(2)        ,displayField:
'gender'
Ext.widgets-grid(2)        ,forceSelection:
true
Ext.widgets-grid(2)        ,mode:
'local'
Ext.widgets-grid(2)}
));
Ext.widgets-grid(2)grid.render();



选择模式都很容易使用,略过,至于其它的扩展,有时间再慢慢研究了,第一步先以学会使用为主

你可能感兴趣的:(widget)