問題描述:獲取部門樹,從數據庫中返回的數據格式爲{id: text:},其中id爲部門ID,text爲部門名稱。在 datagrid 中 unitName(部門名稱,下拉選)爲 combotree 類型。當編輯某一行時,選擇相應部門名稱,但是結束行編輯時該列字段顯示的是 【部門ID】 而不是 【部門名稱】。
1)在 部門下拉樹 中選擇 銷售部
2)選擇之後會在 部門下拉樹 中顯示 銷售部
3) 但是當結束改行編輯時(endEdit),部門下拉樹 就會顯示 【 部門ID】 而不是 【部門名稱】
解決方法:
1 定義全局變量 unitName
//接收部門下拉樹的部門名稱
var unitName = undefined;
2 在 部門下拉樹 中的 onSelect 時間中爲 unitName 賦值
{field:'receivablesUnitName',title:'回款部門',width:100,
editor:{
type:'combotree',
options:{
required:true,
valueField : 'id',
textField : 'text',
data : unitList,
panelHeight:"auto",
onSelect : function(record){
var edUnitId = $("#receivablesRecordsDatagrid").datagrid('getEditor',{
index : lastEditRowIndex,
field : 'receivablesUnitId',
});
$(edUnitId.target).val(record.id);
//爲 unitTreeName賦值
unitTreeName = record.text;
}
}
},
// formatter : function(value,row,index){
// if(row.eventId != undefined && row.eventId.length > 15){
// return value;
// }else{
// return unitTreeName;
// }
// }
},
3 在OnEndEdit 事件中 爲 部門下拉樹 賦值顯示
onEndEdit : function(index,row){
if(unitTreeName == undefined){
$("#receivablesRecordsDatagrid").datagrid('getRows')[index]['receivablesUnitName'] = unitTreeName;
}
}
解決結果圖:
除了這種方法,還可以通過 formatter 來解決這樣的問題。因爲無論是加載數據與編輯結束時datagrid都會執行formatter函數,所以我們可以用它來輸出我們想要的內容。這種方法已經寫出,處在贅述,但是當記錄表中已經存在數據時,需要做一個判斷,這裏通過 eventId 來區分是數據庫中已經存在記錄還是新增的記錄(在這裏已存在的 eventId 是一個長度爲38位的字符串,新增的 eventId 是一個長度爲4的字符串)
總結:
1) formatter 無論加載數據或編輯結束都會執行
2) onEndEdit 事件 與 onAfterEdit 事件的不同
3)getEditor 只能對正在編輯的行起作用,當某一行已經結束編輯,getEditor 獲取的值爲 null
4)爲 datagrid 中某一行的某一列賦值 ,可以通過以下語句
$("#receivablesRecordsDatagrid").datagrid('getRows')[index]['receivablesUnitName'] = unitTreeName;
index爲行號, receivablesUnitName爲列名
5) onSelect 中 record 保存的是 combobox 所選擇的數據 id 和 text 值