`

讲解Flex表格中itemEditor或itemRenderer较好的文章。

阅读更多

Flex DataGrid 编辑实例源码
源码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application layout="vertical" horizontalAlign="center"  
 xmlns:mx="http://www.adobe.com/2006/mxml" >
 <mx:Script>
  <![CDATA[
   import mx.events.DataGridEventReason;
   import mx.controls.NumericStepper;
   import mx.controls.TextInput;
   import mx.core.UIComponent;
   import mx.containers.HBox;
   import mx.controls.DataGrid;
   import mx.events.DataGridEvent;
   // 屏蔽第一列的编辑事件
   private function onItemEditBeginning(event:DataGridEvent):void{
    if(event.columnIndex==0)
     event.preventDefault();
   } 
   private function onItemEditBegin(event:DataGridEvent):void{ 
    // 阻止默认侦听器执行
    event.preventDefault();
    var dg:DataGrid = event.currentTarget as DataGrid;   
    // 创建项目编辑器实例
    dg.createItemEditor(event.columnIndex,event.rowIndex);
    var editorInstance:UIComponent = dg.itemEditorInstance as UIComponent;
    var tiLabel:TextInput = editorInstance.getChildAt(0) as TextInput;
    tiLabel.percentWidth = 50;
    tiLabel.text = dg.editedItemRenderer.data.label;
    var numStepper:NumericStepper = editorInstance.getChildAt(1) as NumericStepper;
    numStepper.percentWidth = 50;
    numStepper.value = dg.editedItemRenderer.data.price;   
   }
   private function onItemEditEnd(event:DataGridEvent):void{
    if (event.reason == DataGridEventReason.CANCELLED){
     // 如果取消编辑,不更新数据 
     return;
    }
    // 阻止默认侦听器执行
    event.preventDefault();
    var dg:DataGrid = event.currentTarget as DataGrid;  
    var editorInstance:UIComponent = dg.itemEditorInstance as UIComponent; 
    var tiLabel:TextInput = editorInstance.getChildAt(0) as TextInput;
    var numStepper:NumericStepper = editorInstance.getChildAt(1) as NumericStepper;
    var newLabel:String = tiLabel.text;
    var newPrice:Number = numStepper.value;
    // 取得旧数据
    var oldLabel:String = dg.editedItemRenderer.data.label;
    var oldPrice:Number = dg.editedItemRenderer.data.price;
    // 判断label是否为空,price是否小于50
    if(newLabel=="" || newPrice<50){  
     //销毁项目编辑器并返回,不更新数据
     dg.destroyItemEditor();   
     return;
    }  
    // 为项目渲染器设置新数据
    dg.editedItemRenderer.data.label = newLabel;
    dg.editedItemRenderer.data.price = newPrice;   
    dg.destroyItemEditor();
   }
  ]]>
 </mx:Script>
 <mx:Model id="myData">
  <items>
   <item>
      <icon>assets/icon1.png</icon>
      <label>Item1</label>
      <price>60.0</price>
   </item>
   <item>
      <icon>assets/icon2.png</icon>
      <label>Item2</label>
      <price>75.0</price>
   </item>
   <item>
      <icon>assets/icon3.png</icon>
      <label>Item3</label>
      <price>60.0</price>
   </item>
   <item>
      <icon>assets/icon4.png</icon>
      <label>Item4</label>
      <price>70.0</price>
   </item>
  </items>
 </mx:Model>
 <mx:DataGrid width="400" dataProvider="{myData.item}" editable="true" 
  itemEditBeginning="onItemEditBeginning(event)" 
  itemEditBegin="onItemEditBegin(event)" 
  itemEditEnd="onItemEditEnd(event)">
  <mx:columns>
   <mx:DataGridColumn itemRenderer="mx.controls.Image" dataField="icon"/> 
   <mx:DataGridColumn headerText="price">
    <!-- 在项目渲染器中使用Label组件显示label和price值  -->
    <mx:itemRenderer>
     <mx:Component>
      <mx:Label text="{data.label}:${data.price}"/>    
     </mx:Component>
    </mx:itemRenderer>
    <mx:itemEditor>
     <mx:Component>
      <!-- 在项目编辑器中使用TextInput和NumericStepper组件 -->
      <mx:HBox horizontalScrollPolicy="off">
       <mx:TextInput/>
       <mx:NumericStepper minimum="0" maximum="100"/>
      </mx:HBox>     
     </mx:Component>
    </mx:itemEditor>    
   </mx:DataGridColumn>   
  </mx:columns>
 </mx:DataGrid>
</mx:Application>
 
<?xml version="1.0" encoding="utf-8"?>
<mx:Application layout="vertical" horizontalAlign="center"  
 xmlns:mx="http://www.adobe.com/2006/mxml" >
 <mx:Script>
  <![CDATA[
   import custom.MyEditor;
   import mx.events.DataGridEventReason;
   import mx.controls.NumericStepper;
   import mx.controls.TextInput;
   import mx.controls.DataGrid;
   import mx.events.DataGridEvent;
   // 屏蔽第一列的编辑事件
   private function onItemEditBeginning(event:DataGridEvent):void{
    if(event.columnIndex==0)
     event.preventDefault();
   } 
   private function onItemEditEnd(event:DataGridEvent):void{
    if (event.reason == DataGridEventReason.CANCELLED){    
     return;
    }
    event.preventDefault();
    var dg:DataGrid = event.currentTarget as DataGrid;  
    var editorInstance:MyEditor = dg.itemEditorInstance as MyEditor;       // 取得项目编辑器中的新数据
    var newLabel:String = editorInstance.newLabel
    var newPrice:Number = editorInstance.newPrice
    // 检查数据是否符合要求
    if(newLabel=="" || newPrice<50){  
     // 销毁项目编辑器并返回,不更新数据
     dg.destroyItemEditor();   
     return;
    }
    // 为项目渲染器设置新数据
    dg.editedItemRenderer.data.label = newLabel;
    dg.editedItemRenderer.data.price = newPrice;   
    dg.destroyItemEditor();
   }   
  ]]>
 </mx:Script>
 <mx:Model id="myData">
  <items>
   <item>
      <icon>assets/icon1.png</icon>
      <label>Item1</label>
      <price>60.0</price>
   </item>
   <item>
      <icon>assets/icon2.png</icon>
      <label>Item2</label>
      <price>75.0</price>
   </item>
   <item>
      <icon>assets/icon3.png</icon>
      <label>Item3</label>
      <price>60.0</price>
   </item>
   <item>
      <icon>assets/icon4.png</icon>
      <label>Item4</label>
      <price>70.0</price>
   </item>
  </items>
 </mx:Model>
 <mx:DataGrid width="300" dataProvider="{myData.item}" editable="true" 
  itemEditBeginning="onItemEditBeginning(event)" 
  itemEditEnd="onItemEditEnd(event)">
  <mx:columns>
   <mx:DataGridColumn itemRenderer="mx.controls.Image" dataField="icon" width="100"/> 
   <mx:DataGridColumn headerText="price" itemEditor="custom.MyEditor" 
    editorXOffset="5" editorYOffset="0" editorHeightOffset="40">
    <!-- 在项目渲染器中使用Label组件显示label和price值  -->
    <mx:itemRenderer>
     <mx:Component>
      <mx:Label text="{data.label}:${data.price}"/>    
     </mx:Component>
    </mx:itemRenderer>       
   </mx:DataGridColumn>  
  </mx:columns>
 </mx:DataGrid>
</mx:Application> 
 

分享到:
评论

相关推荐

    Flex itemEditor详解

    ### Flex中的ItemEditor详解 #### 一、引言 ...在接下来的文章中,我们将继续探讨更多关于`itemEditor`的高级主题,包括复杂的编辑逻辑、验证机制以及如何利用`itemRenderer`作为`itemEditor`等。

    FLEX中DATAgird的学习

    在本篇文章中,我们将深入探讨如何在 `DataGrid` 中应用编辑功能,包括 `editorDataField`、`itemEditor` 和 `itemRenderer` 的使用,以及如何有效地管理和保存编辑后的数据。 首先,`DataGrid` 的编辑功能允许用户...

    Flex教程DataGrid归类.pdf

    - 在ActionScript中,可以通过DataGridColumn对象创建列,并且可以动态地添加或修改列。 6. 编辑器与渲染器(itemEditor/itemRenderer) - itemEditor属性用于指定在DataGrid中编辑数据时使用的控件,例如输入框、...

    flex datagrid

    你可以使用 `itemEditor` 和 `itemRenderer` 自定义单元格的显示和编辑行为。 6. 拖拽操作 虽然没有在描述中明确提到,但 DataGrid 支持拖放功能,允许用户重新排序列或移动数据项。 通过这些基本操作,你可以...

    Flex Datagrid checkbox实现

    Flex Datagrid 是Adobe Flex框架中用于展示数据集的组件,它允许开发者以表格形式展示数据,并提供多种交互功能。在Flex应用中,Datagrid经常被用于处理和展示大量的结构化数据。在标题“Flex Datagrid checkbox实现...

    flex datagril 控件源码

    Flex DataGrid控件是Adobe Flex框架中的一个核心组件,用于展示和操作大量数据。它提供了一种高效且灵活的方式来显示表格形式的数据,并支持多种交互功能,如排序、筛选、分页以及对数据进行增删改查操作。在这个...

    Flex DataGrid组件 使用详解

    Flex DataGrid组件是Adobe Flex框架中的一个重要控件,专门用于以表格形式展示数据。它具有丰富的功能和灵活性,常用于企业级应用中显示多属性对象的列表。DataGrid组件不仅支持基本的表格布局,还提供了排序、编辑...

    Flex教程之DataGrid用法

    在Flex开发中,`DataGrid`是一个非常重要的UI组件,它能够以表格形式展示数据集合,支持数据的排序、筛选等功能。本文将详细介绍Flex中`DataGrid`控件的使用方法,包括通过MXML与ActionScript的不同实现方式,并给出...

    flex3的cookbook书籍完整版dpf(包含目录)

    flex3的cookbook书籍完整版dpf(包含目录),目录是我花了两个多小时自己整理的,希望对大家有帮助。 目录: 第一章.Flex与ActionScript基础(3) 1.1节.用FlexBuilder创建Flex项目 1.2节.用FlexBuilder创建Flex库项目 ...

    Flex动态生成可编辑的DataGrid具体实现代码

    在本部分内容中,我们将详细探讨Flex技术中如何实现一个动态生成并可编辑的DataGrid。DataGrid是一个常用的用于展示表格数据的组件,它允许用户通过直观的界面进行数据的浏览和编辑。在本例中,DataGrid组件将具备...

    item-editor:用于编辑OTB项目文件的编辑器

    您可以使用 Visual Studio 2010 或更高版本中提供的 otitemeditor.sln 构建项目。 只需运行 ./build-linux.sh 即可编译。 它使用 Mono 包中的 xbuild 。 如果有人可以为其他平台提供编译说明,那就

    D2 1.10物品修改器.rar

    "D2 1.10物品修改器.rar" 是针对该游戏1.10版本的一个物品修改工具,主要用于调整游戏中角色的装备、道具等资源,以提升游戏体验或进行测试。 在《暗黑破坏神2》中,物品是游戏的核心元素之一,包括武器、防具、...

    库房管理系统,使用python+pyqt5开发.zip

    10. constants.py:常量定义文件,存储系统中固定不变的参数或配置,有利于代码的维护和更新。 三、系统设计与实现 1. 数据管理:系统可能使用SQLite数据库存储库存信息,实现数据持久化,同时通过Python的sqlite3...

    一个纯粹的Python库存管理系统源码.zip

    在库存管理中,定期打印或展示库存状态和交易历史是必要的。 3. **logManager.py**: 这可能是日志管理模块,负责记录系统操作、错误信息以及用户活动。良好的日志管理对于跟踪系统问题、分析用户行为和优化系统...

    qwt examples

    这些例子为开发者提供了一个很好的起点,通过观察和运行这些例子,开发者可以更快地掌握qwt的各种控件的使用方法,并将其应用到自己的项目中。 为了使内容通顺,我们需要注意,尽管OCR扫描可能造成个别字识别错误或...

Global site tag (gtag.js) - Google Analytics