DataGrid 整體設定 editable="true",再透過攔截 itemEditBegin 事件,根據行索引決定是否允許進入編輯模式,比撰寫自訂 ItemRenderer 簡潔得多。
<mx:DataGrid id="myGrid" editable="true" itemEditBegin="onItemEditBegin(event)">
<mx:columns>
<mx:DataGridColumn dataField="name" headerText="姓名"/>
<mx:DataGridColumn dataField="age" headerText="年齡"/>
</mx:columns>
</mx:DataGrid>
<mx:Script>
</mx:Script>
itemEditBegin 在編輯器實例化**前**派發stopImmediatePropagation() 阻止事件傳播至內部 createItemEditor(),直接取消編輯進入editable="true" 的全域設定,其他行正常編輯private function onItemEditBegin(event:DataGridEvent):void {
var item:Object = event.dataField ? event.itemRenderer.data : null;
if (item && item["isLocked"] == true) { // 資料模型含 isLocked 標記
event.stopImmediatePropagation();
}
// 或根據欄位
if (event.columnIndex == 0 && event.rowIndex % 2 == 0) { // 偶數行第一欄唯讀
event.stopImmediatePropagation();
}
}
editable、管理 editedItemPosition、監聽 itemEditEnd 恢復狀態