记得Dephi里有一个叫Lookup效果的Grid(不知道是不是这种叫法),就是如何在Grid中显示或编辑代码数据项,下面就是Ext的实现
希望对有这种需求的同学有所帮助。
一、重写Ext.grid.GridEditor让Editor控件获得Grid的当前行数据,代码如下,大家可以对照原来Ext.grid.GridEditor的源码
Ext.grid.GridEditor = function(field, config){
Ext.grid.GridEditor.superclass.constructor.call(this, field, config);
field.monitorTab = false;
};
Ext.extend(Ext.grid.GridEditor, Ext.Editor, {
alignment: "tl-tl",
autoSize: "width",
hideEl : false,
cls: "x-small-editor x-grid-editor",
shim:false,
shadow:false,
//从Editor.js中拷贝过来
startEdit : function(el, value){
if(this.editing){
this.completeEdit();
}
this.boundEl = Ext.get(el);
var v = value !== undefined ? value : this.boundEl.dom.innerHTML;
if(!this.rendered){
this.render(this.parentEl || document.body);
}
if(this.fireEvent("beforestartedit", this, this.boundEl, v) === false){
return;
}
this.startValue = v;
this.field.record = this.record;//就加入这一行,让field中获得当前数据行
this.field.setValue(v);
this.doAutoSize();
this.el.alignTo(this.boundEl, this.alignment);
this.editing = true;
this.show();
}
});
二、继承Ext.form.ComboBox,让combo在设置值时把代码值写到Grid当前行的代码数据项中:
Ext.form.LookupComboBox = Ext.extend(Ext.form.ComboBox, {
setValue:function (v) {
var text = v;
var lookupValue;
//增加的代码
if (this.codeField) {
var r = this.findRecord(this.displayField, v);
if (r) {
lookupValue = r.data[this.codeField];
} else {
if (this.valueNotFoundText !== undefined) {
lookupValue = this.valueNotFoundText;
}
}
}
if (this.record&&lookupValue) {
this.record.set(this.lookup, lookupValue);//把代码值写到Grid当前行数据中的代码项目字段
}
//增加的代码 --end
this.lastSelectionText = text;
if(this.hiddenField){
this.hiddenField.value = v;
}
Ext.form.ComboBox.superclass.setValue.call(this, text);
this.value = v;
}});
三、使用:如下代码,附件有完整的例子,下载解压到ext的examples\grid文件夹中可以运行.
//查帐信息
var itemTypeStore = new Ext.data.SimpleStore({
fields: ['code','name'],
data : [['100','流动资产'],['101','固定资产']]
});
var insureModeStore = new Ext.data.SimpleStore({
fields: ['code','name'],
data : [['100','账面原值'],['101','原值加成'],['102','账面余额'],['103','余额加成'],['104','清单'],['105','估价'],['106','账面净值'],['107','其他']]
});
var currencySystemStore = new Ext.data.SimpleStore({
fields: ['code','name'],
data : [['0110001','美元'],['0110002','英镑'],['0110003','港币'],['0110004','人民币']]
});
var Plant = Ext.data.Record.create([
{name:'id',type:'int'},
{name:'surveyId',type:'int'},
{name:'itemType',type:'string'},
{name:'itemName',type:'string'},
{name:'insureMode',type:'string'},
{name:'currencySystem',type:'string'},
{name:'insuredAmount',type:'float'},
{name:'spotPrice',type:'float'},
{name:'desc',type:'string'}
]);
var auditReader = new Ext.data.JsonReader({
idProperty:'id',
fields: [
{name:'id',type:'int'},
{name:'surveyId',type:'int'},
'itemType','itemName','insureMode','currencySystem','desc',
'insureModeName','itemTypeName','currencySystemName',
{name:'insuredAmount',type:'float'},
{name:'spotPrice',type:'float'},
{name:'inAccountTime',type:'date',format:'Y-m-d H:i'}
]
});
var auditStore = new Ext.data.Store({
data: xg.dummyData,
reader: reader,
remoteSort: true
});
var auditsm = new xg.RowNumberer();
var auditcm = new xg.ColumnModel([
auditsm,
{id:'id',hidden: true,dataIndex:'id',sortable: false},
{header:'项目类型代码',hidden:true,dataIndex:'itemType',sortable: false},
//下面是代码的lookup字段,
{header: '项目类型', width: 100,dataIndex: 'itemTypeName',sortable: false,
renderer: function(v, params, record){
//根据项目类型字段的值找代码数据中它的应名称,并显示出来,就可以实现lookup效果了
return findRecordValue(itemTypeStore,'code',record.data['itemType'],'name');
},
//加入LookupComboBox,实现lookup的编辑效果
editor: new Ext.form.LookupComboBox({
store: itemTypeStore,
codeField:'code',
displayField:'name',
lookup:'itemType',
typeAhead: true,
mode: 'local',
triggerAction: 'all',
emptyText:'--请选择--',
selectOnFocus:true
})
},
{header: '项目名称', width: 100,dataIndex: 'itemName',sortable: false,
editor: new Ext.form.TextField({
allowBlank: false
})
},
{header: '投保方式', width: 100,dataIndex: 'insureModeName',sortable: false,
renderer: function(v, params, record){
return findRecordValue(insureModeStore,'code',record.data['insureMode'],'name');
},
editor: new Ext.form.LookupComboBox({
store: insureModeStore,
codeField:'code',
displayField:'name',
lookup:'insureMode',
typeAhead: true,
mode: 'local',
triggerAction: 'all',
emptyText:'--请选择--',
selectOnFocus:true
})
},
{header:'投保方式代码',hidden: true,dataIndex:'insureMode',sortable: false},
{header: '投保时金额',renderer: Ext.util.Format.money,width: 100,dataIndex: 'insuredAmount',sortable: false,
editor: new Ext.form.NumberField({
allowBlank: false,
allowNegative: false,
style: 'text-align:left'
})
},
{header: '出险时金额',renderer: Ext.util.Format.money,width: 80,dataIndex:'spotPrice',sortable: false,
editor: new Ext.form.NumberField({
allowBlank: false,
allowNegative: false,
style: 'text-align:left'
})
},
{header:'项目币种代码',hidden:true,dataIndex:'currencySystem',sortable:false},
{header: '项目币种', width: 60,dataIndex:'currencySystemName',sortable: false,
renderer: function(v, params, record){
return findRecordValue(currencySystemStore,'code',record.data['currencySystem'],'name');
},
editor: new Ext.form.LookupComboBox({
store: currencySystemStore,
codeField:'code',
displayField:'name',
lookup:'currencySystem',
typeAhead: true,
mode: 'local',
triggerAction: 'all',
emptyText:'--请选择--',
selectOnFocus:true
})
},
{header: '入帐时间', width: 90,dataIndex:'inAccountTime',sortable: false,
renderer: Ext.util.Format.dateRenderer('Y-m-d H:i'),
editor: new Ext.form.DateField({format:'Y-m-d H:i',menu:new DatetimeMenu()})
},
{header:'说明',width:120,dataIndex:'desc',sortable: false,
editor:new Ext.form.TextArea()
}
]);
auditcm.defaultSortable = true;
var auditInfoGrid = new xg.EditorGridPanel({
title:'查帐信息',
iconCls:'icon-grid',
store: auditStore,
cm: auditcm,
loadMask: true,
bodyStyle:'width:100%',
border:false,
frame:true,
clicksToEdit:1,
renderTo: document.body,
viewConfig: {forceFit:true},
tbar:[{text:'增加',tooltip:'增加查帐信息',iconCls:'add',handler : function(){
var plan = new Plant({id:0,surveyId:20,itemType:'',itemName:'',insureMode:'',currencySystem:''});
auditStore.commitChanges();
var count = auditStore.getCount();
auditStore.insert(count,plan);
auditInfoGrid.startEditing(count, 0);
}
},
'-',
{text:'删除',tooltip:'删除查帐信息',iconCls:'remove',handler:function(){alert(Ext.util.Format.date(auditStore.getAt(0).data.inAccountTime,'Y-m-d H:i'));}}
]
});
auditStore.load();
Ext.grid.dummyData = [{id:1,surveyId:20,itemType:'100',itemName:'电脑设备',desc:'革命同志',insureMode:'100',currencySystem:'0110004',insuredAmount:1000.00,spotPrice:8900.00,inAccountTime:'Fri Aug 15 11:18:07 CST 2008'}];
- 描述: 效果图
- 大小: 30.2 KB
分享到:
相关推荐
NULL 博文链接:https://zxf-noimp.iteye.com/blog/629629
3. 提交更改:编辑完成后,EditorGridPanel会触发相应的事件,如afteredit,开发者可以通过监听这些事件来处理数据更新。 四、使用步骤 1. 创建Store:定义数据模型并加载数据。 2. 定义列模型:配置每列的字段名、...
EditorGridPanel是Ext JS库中的一个组件,它结合了数据网格和表单编辑的功能,允许用户直接在网格的单元格内编辑数据。当用户点击某个单元格进行编辑时,编辑器应该在原单元格位置弹出,但有时由于某种原因,整个...
因为项目的需求,实现一个可以编辑的tree,在网上找了一个牛人写的控件.Ext.ux.maximgb.tg.EditorGridPanel 把源码下载下来以后 不能运行,自己根据给出的列子,另写了一个小程序.不过并没有与数据库交互.
在EXTJS中,EditorGridPanel是一种可编辑的表格组件,它允许用户直接在表格单元格内编辑数据。然而,当在EditorGridPanel中嵌入ComboBox(下拉选择框)作为编辑器时,可能会遇到一个问题,即ComboBox显示的不是其...
右键菜单的资料,代码已经详细描写。请仿照文件中所描述即可使用,不限于EXT4.0以上版本使用。
在EXT JS框架中,"ext 读取xml 可编辑grid"是一个常见的需求,涉及到的主要知识点包括EXT的数据对象、EditorGridPanel的使用以及EXT对XML数据格式的支持。下面将详细阐述这些内容。 EXT JS是一个强大的JavaScript库...
编辑时,`EditorGridPanel`会使用这些编辑器来控制用户的输入,并在用户完成编辑后将更改应用到原始数据。此外,确保在提交数据到服务器之前进行有效性验证是至关重要的,因为这可以防止无效或错误的数据被保存。 ...
`EditorGridPanel`是GridPanel的一个扩展,它允许用户直接在表格单元格内编辑数据。这对于数据录入和管理非常有用,可以结合各种编辑器实现复杂的数据输入需求。 **九、Ext类库简介** ExtJS2.0的类库包括许多预定义...
Ext.grid.EditorGridPanel还支持手工操作以及通过DataWriter自动进行数据的CRUD操作。 Ext.tree.TreePanel组件用于展示树状结构的数据,可以构建静态的树结构,也可以动态地从服务器加载数据构建树。TreePanel提供...
它通常与Ext的数据存储组件一起使用,以提供更复杂的数据显示效果。 ##### 6. **DatePicker(日期选择器)** DatePicker组件提供了一个直观的界面来选择日期。它包括一个日历弹出窗口,支持多种日期格式和范围限制...
最后,让我们了解一下`Ext.grid.ColumnModel`的关键配置项: 1. **columns** - **描述**:一个列配置数组,每个元素都是一个`Column`配置对象。 2. **defaultSortable/defaultWidth** - **描述**:分别控制...
- **EditorGridPanel**:在GridPanel的基础上增加了单元格编辑功能,可以直接在表格中修改数据。 - **TabPanel**:用于组织多个视图,每个视图都可以在一个标签页中展示。 - **FormPanel**:用于创建各种表单...
在这个例子中,`EditorGridPanel` 提供了对每个单元格的编辑功能,并且还增加了一个工具栏按钮来保存所有的更改。 #### 数据存储器 `Store` 数据存储器是 `GridPanel` 和 `EditorGridPanel` 必不可少的一部分。它...
它支持从多种数据源获取数据,并提供了数据的排序、过滤等功能。 **7.2 Ext.data.DataProxy -- Ext.data.Store 的数据获取器** `Ext.data.DataProxy` 是 `Ext.data.Store` 的一部分,负责从数据源获取数据。常见的...
- GridPanel的编辑功能通常通过`EditorGridPanel`实现,允许用户直接在单元格内进行修改,支持单行编辑和多行编辑模式。 3. **增删改查实现**: - 增加:在TreePanel中,可以创建新的子节点;在GridPanel中,通常...
感谢 Ericzhen 远离颠倒梦想,蕴籍无上清凉 这里引用它的资源 仅作分享 http://www.cnblogs.com/Ericzhen/archive/2012/06/11/2545186.html
它支持分页、排序、过滤等功能,并且可以通过配置项来自定义列和数据源。 #### 7.2 可编辑的表格EditorGridPanel EditorGridPanel是一种特殊的GridPanel,它允许用户直接在表格中编辑数据。这对于需要频繁更新数据...