六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 56|回复: 0

gridPanel添加按钮

[复制链接]

升级  15.33%

17

主题

17

主题

17

主题

秀才

Rank: 2

积分
73
 楼主| 发表于 2013-1-15 01:52:16 | 显示全部楼层 |阅读模式
在实际开发中有的时候需要一些下图这样的功能,为了实现下图方法,需要做很多事情!当然有一种很好的方法,



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


///添加列单击事件,方便在列内添加功能按钮   
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);   
                }   
            }   
        }   
    }
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表