Ext中combox放在EditorGridPanel中的简单应用

yzf86211861 2010-12-23 09:18:51

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 挺纠结的。
最好直接给写下代码 看看。

...全文
847 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
anqinxiaozhu 2013-01-22
  • 打赏
  • 举报
回复
楼主这问题, 我也碰见过。 就是保存的时候显示的是key ,也就是value 。 我的解决方法是把 combox 在取load() 下 。
yzf86211861 2010-12-27
  • 打赏
  • 举报
回复
散分吧 搞不定了 用了个 最笨的 方法,凑合用吧。
yzf86211861 2010-12-27
  • 打赏
  • 举报
回复
赶紧多来几个人散分了
子夜__ 2010-12-24
  • 打赏
  • 举报
回复
也是JSON。
peterb 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yzf86211861 的回复:]

如果就这几个是可以实现的 如果 我 那个 是从数据库读出来的,该怎么写 啊 就是 我在 数据存的 是
1,2 实际对应的是 男或者女。 男和女只是一个 简单的 ,很多都是 从数据库读出来 很多的,不可能就这么写死了。
[/Quote]
这个也是同样处理方式, 可以把需要下拉选择的数据放到一个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;
}}
peterb 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yzf86211861 的回复:]
没有效果 再鼠标移开后,还是变回对应的 key值了 ,继续纠结中
[/Quote]
这个一定是可以的, 是我实际项目中的一段代码copy出来的, 注意store中的json数据格式, 多看看extjs api文档吧
yzf86211861 2010-12-24
  • 打赏
  • 举报
回复
顶 EXT 这个问题 没人解决过吗
yzf86211861 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 holyplace 的回复:]
其实你这个不是问题的问题,因为你的combox返回的就是value,而你的value就是1或者2,你可以使用

var gridColumns = new Ext.grid.ColumnModel([//列模式
_sm,
{ header: "ID", dataIndex: "id", hidden: true },
{ header: "姓名", dataIndex: ……
[/Quote]
看下 9楼 不只 就1 和 2 这么简单
HolyPlace 2010-12-24
  • 打赏
  • 举报
回复
其实你这个不是问题的问题,因为你的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' ? '男' : '女' } }

yzf86211861 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 peterb 的回复:]
引用 4 楼 yzf86211861 的回复:

如果就这几个是可以实现的 如果 我 那个 是从数据库读出来的,该怎么写 啊 就是 我在 数据存的 是
1,2 实际对应的是 男或者女。 男和女只是一个 简单的 ,很多都是 从数据库读出来 很多的,不可能就这么写死了。

这个也是同样处理方式, 可以把需要下拉选择的数据放到一个store里面,参考代码类似于如下

JScript cod……
[/Quote]

var storeSupplement = new Ext.data.JsonStore
(
{
url:prj.root + 'form/SupplementCategories/ajax.aspx?type=02',
autoLoad:true,
root:"data",
fields:["SupplementID","SupplementName"],
listeners: {
beforeload: function(v) {
Ext.apply(this.baseParams,{
tag:'GetSupplementInnerOrOut'
});
},
load : function() {
objSupplement.setValue(objSupplement.getValue());
}
}
}
);
storeSupplement.load();

{id:'channelType', header:'通道类型', dataIndex:'SupplementName', width:120, sortable:true,
editor: new Ext.form.ComboBox({
editable: false,
typeAhead: true,
lazyRender:true,
triggerAction: 'all',
allowBlank: false,
mode: 'local',
store: storeSupplement,
displayField: 'SupplementName',
valueField: 'SupplementID',
emptyText: '请选择通道类型',
blankText: '请选择通道类型'
}),
renderer: function(value){
var record = storeSupplement.getById(value);
if(record)
{
return record.data.name;
}
else return value;
}},


没有效果 再鼠标移开后,还是变回对应的 key值了 ,继续纠结中

peterb 2010-12-23
  • 打赏
  • 举报
回复
显示需要提供自定义的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 '其他';} }
]);
子夜__ 2010-12-23
  • 打赏
  • 举报
回复
记忆中EXT 中的Combox是读Json类型的数据

你可以把 1,男 位置反过来 看看能不能读出来

另外LZ参考下这个文章

Ext.Combox
yzf86211861 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 peterb 的回复:]
显示需要提供自定义的renderer方法

JScript code

var gridColumns = new Ext.grid.ColumnModel([//列模式
_sm,
{ header: "ID", dataIndex: "id", hidden: true },
{ header: "姓名", dataIndex:……
[/Quote]
遇过你 遇到过 顺便 指教下我吧 刚开始弄这个框架 开发
yzf86211861 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 peterb 的回复:]
显示需要提供自定义的renderer方法

JScript code

var gridColumns = new Ext.grid.ColumnModel([//列模式
_sm,
{ header: "ID", dataIndex: "id", hidden: true },
{ header: "姓名", dataIndex:……
[/Quote]
如果就这几个是可以实现的 如果 我 那个 是从数据库读出来的,该怎么写 啊 就是 我在 数据存的 是
1,2 实际对应的是 男或者女。 男和女只是一个 简单的 ,很多都是 从数据库读出来 很多的,不可能就这么写死了。

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧