var _drivStore = new Ext.data.ArrayStore({
id: 0,
fields: ['id','text'],
data: [[1,'张三'],[2,'李四']]
});
var _frmcombo = new Ext.form.ComboBox( {
id :this.genId("frmcombo"),
store :_drivStore,
valueField :"id",
displayField :"text",//记住 valueField :"id",displayField :"text" 名字只能是id和text 否则转换无效
forceSelection :true,
typeAhead :true,
triggerAction :'all',
selectOnFocus :true,// 用户不能自己输入,只能选择列表中有的记录
allowBlank :false
});
this.comborenderer = function(combo){ //该方法通过利用combo来转换简单store里面的数据,如:返回的单据状态是 1,但是前台需要显示 在用(1:就表示在用的意思),这时候只需要在columnModel中做如下渲染就行了
return function(value, cellmeta, record){
var store = combo.getStore();
var index = store.find(combo.valueField, value);
var record = store.getAt(index);
var displayText = "";
if (record == null) {
displayText = value;
} else {
displayText = record.data.text;
}
return displayText;
}
}
//加油信息查询的抬头定义
this.tainQueryCm = new Ext.grid.ColumnModel([
new Ext.grid.CheckboxSelectionModel(),
{header:"bid",dataIndex:"BID",sortable:true,resizable:true,width:100,hidden:true},
{header:"单据编号",dataIndex:"BILLID",sortable:true,resizable:true,width:100,hideable:false},
{header:"单据状态",dataIndex:"BILLSTATUS",hideable:false,sortable:true,editor:_busstatusCombo,renderer:this.comborenderer(_busstatusCombo),scope:this}//转换方法的调用 editor:_busstatusCombo,renderer:this.comborenderer(_busstatusCombo),scope:this 一定要有
]);
如果是单选的:var _record = Ext.getCmp("grid").getSelectionModel().getSelected(); //它得到的是 一个record,可以直接放store里面,也可以直接从record里面获得值
if(_record)
{
var _w =new this.rpwin();
_w.show();
var _items = _w.items.itemAt(0);//得到formpanel对象
_items.form.loadRecord(_record);//注意,只要formpanel里面的组件的name属性和record中的名字一致,用loadRecord就能一次性的赋值过去,而不需要想其他panel里面一个个通过Ext.getCmp('...').setRawValue('ssss');
}else{
Ext.Msg.alert('提示','请选择一张单据');
return;
}
如果是多选:就会稍微复杂一点,因为它得到的是个record数组,你要得到某条记录的值 需要先遍历record数组得到单个的record
var _selmodels = Ext.getCmp(this.genId("main")).getSelectionModel();
if(_selmodels.hasSelection())
{
var _w =new this.rpwin();
_w.show();
var _items = _w.items.itemAt(0);//得到formpanel对象(注意这个我是封装在一个类中了,而且该窗体的创建代码和窗体里面的组件代码并不在一个js中,所以才需要这样得到,一般情况下只需要用formpanel的名字就行)
var _selections = _selmodels.getSelections();
Ext.each(_selections,function(item){//遍历record数组
_items.form.loadRecord(item);//将遍历出来的某个record加载到formpanel中
});
}else{
Ext.Msg.alert('提示','请选择一张单据');
return;
}