在extjs中,grid上渲染的combo中的值,默认显示的是valueField的上值,也就是说在grid上的combox显示的是当前值的下标索引
而不是我们所需要的displayField上的属性值!那么如何解决这个问题呢?我们要去写一个renderer这个事件例如下面代码
dataIndex: 'belongNodeID',
header: '选择任务关系',
editor: {
id: 'belongNodelist',
xtype: 'combo',
typeAhead: true,
selectOnTab: true,
store: belongNodeStore,
displayField: 'label',
valueField: 'value',
editable: false,
lazyRender: true,
},
//显示displayvalue就要给该列添加renderer方法
renderer: function(data) {
//循环遍历belongNodeStore中数据里的集合
for (var i = 0; i < belongNodeStore.data.items.length; i++) {
//如果索引相同
if (belongNodeStore.data.items[i].data.value == data) {
//返回数据集合里displayField中的值
return belongNodeStore.data.items[i].data.label;
}
}
}
这里的 belongNodeStore是从数据库里读出combo中所需要的数据保存在belongNodeStore中的store,即
var belongNodeStore = Ext.create('Ext.data.Store', {
fields: ['label', 'value'],
//小脚本中的方法是从后台中定义的
data: [ <%=getComBox() %>],
autoLoad: true
});
后台读取代码如下
public string getComBox()
{
...//调用数据库方法省略,把读取出来的数据保存在一个list对象集合里
StringBuilder sb = new StringBuilder();
foreach (var item in list)
{
sb.Append("{'label':'"+item.Name+"','value':'"+item.Id+"'},");
}
return sb.ToString().TrimEnd(',');
}
以上代码就可以实现从数据库中读出来的数据能够在grid中的Combo中显示其对应的 displayField值