在实际开发中有的时候需要一些下图这样的功能,为了实现下图方法,需要做很多事情!当然有一种很好的方法,
但是不安全,不容易维护!为了方便维护所以写了下面的方法!
///添加列单击事件,方便在列内添加功能按钮 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(''); 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 "" + value + ""; }, 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之间的列写发,不同所以搞了一个这个东西!
代码如下:
// /