Ext的Grid中使用combobox做为编辑控件时,遇到在combobox中选择了相应的选项时(displayField),在grid中却显示了valueField值。现解决如下:
图示:
js代码:
1
var grid;
2
function ready(queryCondition)
3
{
4
var pageSize = 150 ;
5
var queryConditionTemplate = document.getElementById( “ hid “ ).value;
6
var url = “ ../AjaxFactory/AjaxGridData.aspx?cln=BindCommandTemplate&orderField=FGID&pagesize= “ + pageSize + “ &orderType=asc&queryConditionTemplate= “ + queryConditionTemplate;
7
8
var url1 = “ ../AjaxFactory/AjaxGridData.aspx?cln1=BindTemplateGroup&orderField=DMCOD&orderType=asc&projectID= “ + fatherID;
9
var url2 = “ ../AjaxFactory/AjaxGridData.aspx?cln2=BindG050&orderField=DMCOD&orderType=asc “ ;
10
// var store;
11
var comStore1;
12
var comStore2;
13
var storeMapping;
14
var addCategory;
15
var afterEdit;
16
var defaultStore;
17
var specoalStore;
18
19
storeMapping = [ “ FGID “ , “ COMMANDID “ , “ PARENTNAME “ , “ FUNCTIONIDNAME “ , “ NAME “ , “ GROUPNAME “ , “ HANDLESNAME “ ];
20
21
// grid 数据源
22
store = new Ext.data.Store( {
23
proxy: new Ext.data.HttpProxy( {
24
url:url
25
} ),
26
reader: new Ext.data.JsonReader( {
27
root: ‘ data ‘ ,
28
totalProperty: ‘ totalCount ‘ ,
29
fields:
30
[
31
‘ FGID ‘ , ‘ COMMANDID ‘ , ‘ PARENTNAME ‘ , ‘ SONNAME ‘ , ‘ NAME ‘ , ‘ FUNCTIONID ‘ , ‘ GROUPNAME ‘ , ‘ HANDLESNAME ‘
32
]
33
} ),
34
remoteSort: true
35
} );
36
// 模板组
37
comStore1 = new Ext.data.Store( {
38
proxy: new Ext.data.HttpProxy( {url:url1} ),
39
reader: new Ext.data.JsonReader( {
40
root: ‘ data ‘ ,
41
totalProperty: ‘ totalCount ‘ ,
42
fields:
43
[ ‘ GROUPID ‘ , ‘ GROUP_NAME ‘ ]
44
} )
45
} ),
46
comStore1.load();
47
// 读写
48
comStore2 = new Ext.data.Store( {
49
proxy: new Ext.data.HttpProxy( {url:url2} ),
50
reader: new Ext.data.JsonReader( {
51
root: ‘ data ‘ ,
52
totalProperty: ‘ totalCount ‘ ,
53
fields:
54
[ ‘ DMCOD ‘ , ‘ DMCPT ‘ ]
55
} )
56
} ),
57
comStore2.load();
58
59
60
var cm = new Ext.grid.ColumnModel([
61
new Ext.grid.RowNumberer(),
62
{header: “ 角色编号 “ ,align: ‘ center ‘ ,sortable: false ,dataIndex: ‘ FGID ‘ ,hidden: true } ,
63
{header: “ 命令编号 “ ,align: ‘ center ‘ ,sortable: false ,dataIndex: ‘ COMMANDID ‘ ,hidden: true } ,
64
{header: “ 子系统 “ ,align: ‘ center ‘ ,sortable: false ,dataIndex: ‘ PARENTNAME ‘ } ,
65
{header: “ 模块 “ ,align: ‘ center ‘ ,sortable: false ,dataIndex: ‘ SONNAME ‘ } ,
66
{header: “ 功能 “ ,align: ‘ center ‘ ,sortable: false ,dataIndex: ‘ NAME ‘ } ,
67
{
68
header: “ 模板组 “ ,
69
dataIndex: “ GROUPNAME “ ,
70
align: ‘ center ‘ ,
71
editor: new Ext.form.ComboBox( {
72
id: ‘ termtype ‘ ,
73
name: ‘ termtype ‘ ,
74
readOnly: true ,
75
fieldLabel: ‘ 模板组 ‘ ,
76
hiddenName: ‘ id ‘ ,
77
store: comStore1,
78
displayField: ‘ GROUP_NAME ‘ ,
79
valueField: ‘ GROUPID ‘ ,
80
typeAhead: true ,
81
mode: ‘ local ‘ ,
82
triggerAction: ‘ all ‘ ,
83
emptyText: ‘ 请选择 ‘ ,
84
selectOnFocus: true
85
} ),
86
renderer: function (value, cellmeta, record)
87
{
88
// 通过匹配value取得ds索引
89
var index = comStore1.find(Ext.getCmp( ‘ termtype ‘ ).valueField,value);
90
// 通过索引取得记录ds中的记录集
91
var record = comStore1.getAt(index);
92
// 返回记录集中的value字段的值
93
var returnvalue = “” ;
94
if (record)
95
{
96
returnvalue = record.data.GROUP_NAME;
97
}
98
return returnvalue; // 注意这个地方的value是上面displayField中的value
99
}
100
} ,
101
{
102
header: “ 操作性 “ ,
103
dataIndex: “ HANDLESNAME “ ,
104
align: ‘ center ‘ ,
105
editor: new Ext.form.ComboBox( {
106
id: ‘ termtype1 ‘ ,
107
name: ‘ termtype1 ‘ ,
108
readOnly: true ,
109
fieldLabel: ‘ 操作性 ‘ ,
110
hiddenName: ‘ id ‘ ,
111
store: comStore2,
112
displayField: ‘ DMCPT ‘ ,
113
valueField: ‘ DMCOD ‘ ,
114
115
typeAhead: true ,
116
mode: ‘ remote ‘ ,
117
triggerAction: ‘ all ‘ ,
118
emptyText: ‘ 请选择 ‘ ,
119
selectOnFocus: true
120
} ),
121
renderer: function (value, cellmeta, record)
122
{
123
// 通过匹配value取得ds索引
124
var index = comStore2.find(Ext.getCmp( ‘ termtype1 ‘ ).valueField,value);
125
// 通过索引取得记录ds中的记录集
126
var record = comStore1.getAt(index);
127
// 返回记录集中的value字段的值
128
var returnvalue = “” ;
129
if (record)
130
{
131
returnvalue = record.data.DMCPT;
132
}
133
return returnvalue; // 注意这个地方的value是上面displayField中的value
134
}
135
}
136
]);
137
cm.defaultSortable = true ;
138
139
grid = new Ext.grid.EditorGridPanel( {
140
id: “ topicCategoryGrid “ ,
141
store:store,
142
cm:cm,
143
loadMask: true ,
144
clicksToEdit: 1 ,
145
renderTo: ‘ authorize ‘ ,
146
trackMouseOver: true ,
147
autoShow : true ,
148
autoScroll: true ,
149
loadMask: {msg: “ 数据加载中,请稍等
“ } ,
150
frame: true ,
151
height: window.screen.availHeight – 200 , // 176,
152
width: window.screen.availWidth – s_widths,
153
viewConfig: {forceFit: true } ,
154
region: “ center “ ,
155
bbar: new Ext.PagingToolbar( {
156
pageSize: 150 ,
157
store:store,
158
displayInfo: true ,
159
displayMsg: ‘ 当前显示 {0} – {1}条记录 /共 {2}条记录 ‘ ,
160
emptyMsg: “ 没有数据 “
161
} )
162
} );
163
grid.on( “ afteredit “ ,
164
function (obj)
165
{
166
var r = obj.record;
167
var l = obj.field;
168
var uFGID = r.get( “ FGID “ );
169
var uCOMMANDID = r.get( “ COMMANDID “ );
170
var uGROUPNAME = Ext.getCmp( “ termtype “ ).getValue();
171
var uHANDLESNAME = Ext.getCmp( “ termtype1 “ ).getValue();
172
var today = new Date().getTime();
173
Ext.Ajax.request( {
174
url: “ ../AjaxFactory/AjaxGridData.aspx?cln=UpdateRoleTemplate&orderField=FGID&orderType=asc&da= “ + today,
175
method: ‘ POST ‘ ,
176
params: {
177
uFGID:uFGID,
178
uCOMMANDID:uCOMMANDID,
179
uGROUPNAME:uGROUPNAME,
180
uHANDLESNAME:uHANDLESNAME,
181
l:l
182
} ,
183
success: function (response) {
184
// store.load();
185
} ,
186
failure: function (response) {
187
Ext.MessageBox.alert( “ 温馨提示 “ , “ 请求失败! “ );
188
} ,
189
scope: this
190
} );
191
} ,
192
this );
193
194
grid.getStore().load( {
195
params: {
196
start: 0 ,
197
limit: 12
198
}
199
} );
200
}
201
// 自适应
202
function GridOnReSize(s_widths)
203
{
204
grid.setWidth(window.screen.availWidth – s_widths);
205
grid.setHeight(window.screen.availHeight – 200 );
206
}
207
关键代码如下:
1
renderer: function (value, cellmeta, record)
2
{
3
// 通过匹配value取得ds索引
4
var index = comStore1.find(Ext.getCmp( ‘ termtype ‘ ).valueField,value);
5
// 通过索引取得记录ds中的记录集
6
var record = comStore1.getAt(index);
7
// 返回记录集中的value字段的值
8
var returnvalue = “” ;
9
if (record)
10
{
11
returnvalue = record.data.GROUP_NAME;
12
}
13
return returnvalue; // 注意这个地方的value是上面displayField中的value
14
}