Ext中combox放在EditorGridPanel中的简单应用
var strSex = new Ext.data.SimpleStore({
fields: ['value', 'name'],
data : [
['1', '男'],
['2', '女']
]
});
var objSex = new Ext.form.ComboBox({
hideLabel: true,
lazyRender: true, //值为true时阻止ComboBox渲染直到该对象被请求
store: strSex,
displayField: "name",
valueField: "value",
mode: "local",
editable: false,
triggerAction: "all"
});
var gridColumns = new Ext.grid.ColumnModel([//列模式
_sm,
{ header: "ID", dataIndex: "id", hidden: true },
{ header: "姓名", dataIndex: "name", editor: objEditname },
{ header: "性别", dataIndex: "sex", editor: objSex }
]);
var grid = new Ext.grid.EditorGridPanel ({//数据显示面板
border: false,
loadMask: true,
clicksToEdit:2,
width: 500,
height: 300,
store: store,
sm: _sm,
cm: gridColumns,
clicksToEdit: 2,
bbar: grid_bbar,
region:'center'//border布局必须
});
EditorGridPanel编辑完后,下拉框在鼠标离开以后 本来是应该显示 男或者女,但是却很奇怪的变成 1或者2.
我那个 男和女的 在别的地方,是从数据库读出来的,在数据库放的是 1,2,3, 对应男,女,其他,类似的很多。
这里为了测试 写死了,这样写没问题的 var strSex = new Ext.data.SimpleStore({
fields: ['value', 'name'],
data : [
['男'', '男'],
['女'', '女']
]
});
但是我不想这样解决问题,谁解决过能教下我谢谢了 刚学的 EXT 挺纠结的。
最好直接给写下代码 看看。
------解决方案--------------------
记忆中EXT 中的Combox是读Json类型的数据
你可以把 1,男 位置反过来 看看能不能读出来
另外LZ参考下这个文章
Ext.Combox
[解决办法]
显示需要提供自定义的renderer方法
var gridColumns = new Ext.grid.ColumnModel([//列模式
_sm,
{ header: "ID", dataIndex: "id", hidden: true },
{ header: "姓名", dataIndex: "name", editor: objEditname },
{ header: "性别", dataIndex: "sex", editor: objSex, renderer: function(value)
{if(value==1) return '男'; else if(2==value) return '女'; else return '其他';} }
]);
[解决办法]
这个也是同样处理方式, 可以把需要下拉选择的数据放到一个store里面,参考代码类似于如下
var dsChannelType = new Ext.data.JsonStore({
url: '../DeviceServlet?status=channelType',
root: 'root',
fields: ['id', 'name']
});
dsChannelType.load();
{id:'channelType', header:'通道类型', dataIndex:'channelType', width:120, sortable:true,
editor: new fm.ComboBox({
editable: false,
typeAhead: true,
lazyRender:true,
triggerAction: 'all',
allowBlank: false,
mode: 'local',
store: dsChannelType,
displayField: 'name',
valueField: 'id',
emptyText: '请选择通道类型',
blankText: '请选择通道类型'
}),
renderer: function(value){
var record = dsChannelType.getById(value);
if(record)
{
return record.data.name;
}
else return value;
}}
[解决办法]
也是JSON。

[解决办法]
其实你这个不是问题的问题,因为你的combox返回的就是value,而你的value就是1或者2,你可以使用
var gridColumns = new Ext.grid.ColumnModel([//列模式
_sm,
{ header: "ID", dataIndex: "id", hidden: true },
{ header: "姓名", dataIndex: "name", editor: objEditname },
{ header: "性别", dataIndex: "sex", editor: objSex }
]);
改为
{ header: "性别", dataIndex: "sex", editor: objSex,renderer:function(value){ return value == '1' ? '男' : '女' } }
[解决办法]
这个一定是可以的, 是我实际项目中的一段代码copy出来的, 注意store中的json数据格式, 多看看extjs api文档吧
[解决办法]
该回复于2010-12-27 16:06:22被版主删除