首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Flex DataGrid 指定行不可編輯:攔截 itemEditBegin 事件最簡實作

     編輯:更多程式設計知識

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();
  }
}

對比:ItemRenderer 方案 (較重)

  • 需自訂 Renderer 監聽滑鼠事件、手動切換 editable、管理 editedItemPosition、監聽 itemEditEnd 恢復狀態
  • 適用於**單元格級**極其複雜的編輯控制 (如下拉選單動態載入、跨欄位聯動)
  • 單純「整行/整欄唯讀」強烈建議使用事件攔截法
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved