`
tayuexiaotian
  • 浏览: 24428 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

gridPanel添加按钮

阅读更多
在实际开发中有的时候需要一些下图这样的功能,为了实现下图方法,需要做很多事情!当然有一种很好的方法,



但是不安全,不容易维护!为了方便维护所以写了下面的方法!


///添加列单击事件,方便在列内添加功能按钮  
Ext.grid.GridPanel.prototype.processEvent = function(name, e){  
                        this.fireEvent(name, e);  
                        var t = e.getTarget();  
                        var v = this.view;  
                        var header = v.findHeaderIndex(t);  
                        if(header !== false){  
                            this.fireEvent("header" + name, this, header, e);  
                        }else{  
                            var row = v.findRowIndex(t);  
                            var cell = v.findCellIndex(t);  
                            if(row !== false){  
                                this.fireEvent("row" + name, this, row, e);  
                                if(cell !== false){  
                                    var col =this.colModel.config[cell];  
                                    var record= this.store.getAt(row);       
                                    if(typeof col.onColumnCilck == "function")  
                                    {                             
                                        col.onColumnCilck(this,record,row,cell,e);  
                                    }  
                                    this.fireEvent("cell" + name, this, row, cell, e);  
                                }  
                            }  
                    }}    
//按钮列  
Ext.grid.ButtonColumn =function(text){    
    var a={  
        text:text  
    }  
    return  function(v, p, record){  
        var tpl=    new Ext.Template('<button type="button">{text}</button>');  
        return tpl.apply(a);  
    }  
}                    
///添加列单击事件,方便在列内添加功能按钮
Ext.grid.GridPanel.prototype.processEvent = function(name, e){
            this.fireEvent(name, e);
            var t = e.getTarget();
            var v = this.view;
            var header = v.findHeaderIndex(t);
            if(header !== false){
                this.fireEvent("header" + name, this, header, e);
            }else{
                var row = v.findRowIndex(t);
                var cell = v.findCellIndex(t);
                if(row !== false){
                    this.fireEvent("row" + name, this, row, e);
                    if(cell !== false){
                     var col =this.colModel.config[cell];
                     var record= this.store.getAt(row);    
                     if(typeof col.onColumnCilck == "function")
                     {                  
                      col.onColumnCilck(this,record,row,cell,e);
                     }
                        this.fireEvent("cell" + name, this, row, cell, e);
                    }
                }
           }}
//按钮列
Ext.grid.ButtonColumn =function(text){
var a={
  text:text
}
return function(v, p, record){
     var tpl= new Ext.Template('<button type="button">{text}</button>');
        return tpl.apply(a);
    }
}          

用法如下:


function RiYongPinGrid() {  
    var sm = new Ext.grid.CheckboxSelectionModel();   
 
    var ColumnProperts = [sm,  
        {  
          
        Name : '',  
        Caption : "按钮",  
        Type : 'string',  
        width : 180,  
        renderer : Ext.grid.ButtonColumn('按钮'),  
        onColumnCilck:function(grid,record,rowIndex,colIndex,e)  
        {  
            alert(record.get("strname"))  
            Alert(rowIndex);  
            Alert(colIndex);  
        },  
        editor : new Ext.form.TextField()  
    },{  
          
        Name : 'strname',  
        Caption : "办公用品名称",  
        Type : 'string',  
        width : 180,  
        renderer : function(value, metadata, record) {  
            crecord = record;  
            return "<a href="#" mce_href="#" onclick=javascript:ShowViewWin()>" 
                    + value + "</a>";  
        },  
        onColumnCilck:function(grid,record,rowIndex,colIndex,e)  
        {  
            alert(record.get("strname"))  
            Alert(rowIndex);  
            Alert(colIndex);  
        },  
        editor : new Ext.form.TextField()  
    }, {  
        Name : 'iadderid',  
        Caption : "创建人",  
        Type : 'string',  
        width : 180,  
        renderer : ColumnPropert.getStoreRenderer({  
                    store : TestData.StaffStore,  
                    valueField : 'istaffbasicinfoid',  
                    DisplayField : 'strrealname' 
                }),  
        editor : new Ext.form.TextField()  
    }, {  
        Name : 'iguanlierid',  
        Caption : "管理人",  
        Type : 'string',  
        width : 180,  
        renderer : ColumnPropert.getStoreRenderer({  
                    store : TestData.StaffStore,  
                    valueField : 'istaffbasicinfoid',  
                    DisplayField : 'strrealname' 
                }),  
        editor : new Ext.form.TextField()  
    }, {  
        Name : 'iadddeptid',  
        Caption : "归属部门",  
        Type : 'string',  
        width : 180,  
        renderer : ColumnPropert.getStoreRenderer( {  
                store : TestData.DeptStore,  
                valueField : 'ideptid',  
                DisplayField : 'strdeptname' 
        }),  
        editor : new Ext.form.TextField()  
    }];  
 
    var columnPropert1 = new ColumnPropert(ColumnProperts);  
    var record = new Ext.data.Record.create(columnPropert1.GetRecord());  
 
    var cm = new Ext.grid.ColumnModel(columnPropert1.GetColumnModel());  
    cm.defaultSortable = true;  
    var store = new Ext.data.JsonStore({  
                url : ServerUrl + '?op=list' 
            });  
    store.load();  
    var grid = new Ext.grid.GridPanel({  
        store : store,  
        cm : cm,  
        sm : sm,  
        id : 'RYPGrid',  
        frame : true,  
        clicksToEdit : 1,  
        tbar : [{  
                    text : '添加日用品',  
                    iconCls:'tianjia',  
                    handler : function(src) {  
                        StateEdit(src.text)  
                    }  
                }, {  
                    text : '修改日用品',  
                        iconCls : 'application_form_edit',  
                    handler : function(src) {  
                        var r = Ext.getCmp('RYPGrid').getSelectionModel()  
                                .getSelected();  
                        if (r) {  
                            StateEdit(src.text)  
                            Ext.getCmp('RYPEditPanel').getForm().loadRecord(r);  
                        } else {  
                            alert('请选择一条记录');  
                        }  
                    }  
                }, {  
                    text : '删除日用品',  
                    iconCls:'shanchu',  
                    handler : function(src) {  
                        var r = Ext.getCmp('RYPGrid').getSelectionModel()  
                                .getSelected();  
                        if (r) {  
                            confirm('提示', '确认删除吗?', function() {  
                                        AjaxMethod(ServerUrl, {  
                                                    op : 'delete',  
                                                    id : r.get('ibangongyongpinid')  
                                                }, function(response, options) {  
                                                    alert(response.responseText);  
                                                    Ext.getCmp('RYPGrid').store.remove(r);  
                                                });  
                                    });  
                        } else {  
                            alert('请选择一条记录');  
                        }  
                    }  
                }, '日用品查询', {  
                    xtype : 'combo',  
                    triggerClass : ',x-form-search-trigger',  
                    onTriggerClick : function(src) {  
                        store.removeAll();  
                        store.load({  
                                    params : {  
                                        Key : this.getValue(),  
                                        start : 0,  
                                        limit : 25  
                                    }  
                                });  
                    }  
                }]  
    });  
 
    return grid;  

function RiYongPinGrid() {
var sm = new Ext.grid.CheckboxSelectionModel();

var ColumnProperts = [sm,
  {
 
  Name : '',
  Caption : "按钮",
  Type : 'string',
  width : 180,
  renderer : Ext.grid.ButtonColumn('按钮'),
  onColumnCilck:function(grid,record,rowIndex,colIndex,e)
  {
   alert(record.get("strname"))
   Alert(rowIndex);
   Alert(colIndex);
  },
  editor : new Ext.form.TextField()
},{
 
  Name : 'strname',
  Caption : "办公用品名称",
  Type : 'string',
  width : 180,
  renderer : function(value, metadata, record) {
   crecord = record;
   return "<a href="#" mce_href="#" onclick=javascript:ShowViewWin()>"
     + value + "</a>";
  },
  onColumnCilck:function(grid,record,rowIndex,colIndex,e)
  {
   alert(record.get("strname"))
   Alert(rowIndex);
   Alert(colIndex);
  },
  editor : new Ext.form.TextField()
}, {
  Name : 'iadderid',
  Caption : "创建人",
  Type : 'string',
  width : 180,
  renderer : ColumnPropert.getStoreRenderer({
     store : TestData.StaffStore,
     valueField : 'istaffbasicinfoid',
     DisplayField : 'strrealname'
    }),
  editor : new Ext.form.TextField()
}, {
  Name : 'iguanlierid',
  Caption : "管理人",
  Type : 'string',
  width : 180,
  renderer : ColumnPropert.getStoreRenderer({
     store : TestData.StaffStore,
     valueField : 'istaffbasicinfoid',
     DisplayField : 'strrealname'
    }),
  editor : new Ext.form.TextField()
}, {
  Name : 'iadddeptid',
  Caption : "归属部门",
  Type : 'string',
  width : 180,
  renderer : ColumnPropert.getStoreRenderer( {
    store : TestData.DeptStore,
    valueField : 'ideptid',
    DisplayField : 'strdeptname'
  }),
  editor : new Ext.form.TextField()
}];

var columnPropert1 = new ColumnPropert(ColumnProperts);
var record = new Ext.data.Record.create(columnPropert1.GetRecord());

var cm = new Ext.grid.ColumnModel(columnPropert1.GetColumnModel());
cm.defaultSortable = true;
var store = new Ext.data.JsonStore({
    url : ServerUrl + '?op=list'
   });
store.load();
var grid = new Ext.grid.GridPanel({
  store : store,
  cm : cm,
  sm : sm,
  id : 'RYPGrid',
  frame : true,
  clicksToEdit : 1,
  tbar : [{
     text : '添加日用品',
     iconCls:'tianjia',
     handler : function(src) {
      StateEdit(src.text)
     }
    }, {
     text : '修改日用品',
      iconCls : 'application_form_edit',
     handler : function(src) {
      var r = Ext.getCmp('RYPGrid').getSelectionModel()
        .getSelected();
      if (r) {
       StateEdit(src.text)
       Ext.getCmp('RYPEditPanel').getForm().loadRecord(r);
      } else {
       alert('请选择一条记录');
      }
     }
    }, {
     text : '删除日用品',
     iconCls:'shanchu',
     handler : function(src) {
      var r = Ext.getCmp('RYPGrid').getSelectionModel()
        .getSelected();
      if (r) {
       confirm('提示', '确认删除吗?', function() {
          AjaxMethod(ServerUrl, {
             op : 'delete',
             id : r.get('ibangongyongpinid')
            }, function(response, options) {
             alert(response.responseText);
             Ext.getCmp('RYPGrid').store.remove(r);
            });
         });
      } else {
       alert('请选择一条记录');
      }
     }
    }, '日用品查询', {
     xtype : 'combo',
     triggerClass : ',x-form-search-trigger',
     onTriggerClick : function(src) {
      store.removeAll();
      store.load({
         params : {
          Key : this.getValue(),
          start : 0,
          limit : 25
         }
        });
     }
    }]
});

return grid;
}

要问我ColumnPropert是什么?是我自己写的一个方便开发的东西!因为store和grid之间的列写发,不同所以搞了一个这个东西!

代码如下:


// / <reference path="../../extjs2.0/adapter/ext/ext-base.js" />  
 
// / <reference path="../../extjs2.0/ext-all-debug.js" />  
// / <reference path="namespace.js" />  
 
/* 
* Config= [ {Caption:'', Name:'', Type:'' } ], 
*/ 
 
ColumnPropert = function(config) {  
    this.Columns = config;  
    // Columns:[{Caption:'',Name:'',Type:'',ColumnModelConfig:[],StoreConfig:[]}],  
    // this.Columns.Caption=  
 
    // 获取数据源的字段描述  
    // VorP是显示,还是打印  
    this.GetJsonStoreFields = function(VorP) {  
 
        var fields = [], ln = this.Columns.length, j = 0;  
        for (var i = 0;i < ln; i++) {  
            var column = this.Columns[i];  
            var field = {};  
            // for(var o in column)  
            // {  
            // field[o]=column[o];  
            // }  
            // 显示  
            if (VorP == 'V' && column.IsView == 1 || VorP == null) {  
                if (column.Name != null) {  
                    field.name = column.Name;  
                    field.type = column.Type;  
                    fields[j] = field;  
                    j++;  
                }  
            }  
            // 打印  
            if (VorP == 'P' && column.IsPrint == 1) {  
                if (column.Name != null) {  
                    field.name = column.Name;  
                    field.type = column.Type;  
                    fields[j] = field;  
                    j++;  
                }  
            }  
        }  
        return fields;  
    };  
 
    // 获取数据源的字段描述  
    this.GetColumnModel = function(VorP) {  
        var ColumnModels = [], ln = this.Columns.length, j = 0;  
 
        for (var i = 0;i < ln; i++) {  
            var column = this.Columns[j];  
            var ColumnModel = {};  
 
            if (column.Type == 'date') {  
                ColumnModel.renderer = Ext.util.Format.dateRenderer("Y-m-d");// 默认的日期渲染方式  
            }  
 
            if (VorP == 'V' && column.IsView == 1 || VorP == null) {  
                for (var o in column) {  
                    ColumnModel[o] = column[o];  
                }  
                ColumnModel.header = column.Caption;  
                ColumnModel.dataIndex = column.Name;  
                ColumnModel.type = column.Type;  
                ColumnModels[j] = ColumnModel;  
                j++;  
            } else if (VorP == 'P' && column.IsPrint == 1) {  
                for (var o in column) {  
                    ColumnModel[o] = column[o];  
                }  
                ColumnModel.header = column.Caption;  
                ColumnModel.dataIndex = column.Name;  
                ColumnModel.type = column.Type;  
                ColumnModels[j] = ColumnModel;  
                j++;  
            }  
 
        }  
        return ColumnModels;  
    };  
    // 单条记录  
    this.GetRecord = function(VorP) {  
 
        var fields = [], ln = this.Columns.length, j = 0;  
        for (var i = 0;i < ln; i++) {  
            var column = this.Columns[i];  
            var field = {};  
            if (VorP == 'V' && column.IsView == 1 || VorP == null) {  
                if (column.Name != null) {  
                    field.name = column.Name;  
                    // field.type=column.Type;  
                    fields[j] = field;  
                    j++;  
                }  
            } else if (VorP == 'P' && column.IsPrint == 1) {  
                if (column.Name != null) {  
                    field.name = column.Name;  
                    // field.type=column.Type;  
                    fields[j] = field;  
                    j++;  
                }  
            }  
        }  
        return fields;  
    }  
 
    // 返回一条新的空记录  
    this.GetNewRecord = function(VorP) {  
        var newObj = {}, ln = this.Columns.length;  
        for (var i = 0;i < ln; i++) {  
            var column = this.Columns[i];  
 
            if (VorP == 'V' && column.IsView == 1 || VorP == null) {  
                if (column.Name != null) {  
                    newObj[column.Name] = column.DefaultValue==null? '':column.DefaultValue;  
                }  
            } else if (VorP == 'P' && column.IsPrint == 1) {  
                if (column.Name != null) {  
                    newObj[column.Name] = column.DefaultValue==null? '':column.DefaultValue;  
                }  
            }  
        }  
        return newObj;  
    }  
      
    
};  
    /*根据store来渲染grid的列,不需要自己再写额外的渲染方法 
     * Examples 
     *  
        storeConfig:{ 
            store:infoStore, 
            valueField:'Id', 
            DisplayField:'Name' 
        } 
    */ 
ColumnPropert.getStoreRenderer = function(storeConfig) {  
        return function(value) {  
            var ln = storeConfig.store.getCount();  
            var record;  
            for (var i = 0;i < ln; i++) {  
                record = storeConfig.store.getAt(i);  
                if (record.get(storeConfig.valueField) == value) {  
                    return record.get(storeConfig.DisplayField);  
                }  
            }  
        }  
    } 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics