`
hjy2099
  • 浏览: 262746 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

同一个Column,不同ItemEditor

    博客分类:
  • Flex
阅读更多

这类需求比较少见,不过还是被我碰上了,哈哈。AdvancedDataGrid中的某个Column,可能有些行有itemEditor,而有些没有,由data内的一些值来决定。我翻了一下帮助,常规来说似乎是做不到的。好在ItemEditor可以被重新定义,“小动作”的机会大大增加。

我的想法是:首先column还是要设定可以editable,但是对某些行来说,可以透过自定义的ItemEditor来返回一个空白的Canvas,从用户角度来讲,他们只会看到一个不可编辑的单元格。下面的工作就是如何来定义一个ItemEditor的问题了。我在google上找到一个绝佳的例子:http://www.actionscript.org/forums/showthread.php3?p=817711。就是欠分析,o(∩_∩)o…。

按照flex framework的设计,每个ItemEditor都要继承mx.controls.listClasses.IListItemRenderer接口,你可以去翻翻帮助,很多组件都会继承这个接口,包括Container(这就是为什么很多组件可以被嵌在mx:component里的道理)。我就挑Canvas来写我自己的ItemEditor了。噢,还需要注意的一点是,需要继承mx.core.IDataRenderer,它定义了data property,好在Canvas也帮我们继承了。

下面是我写的ItemEditor:

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" verticalScrollPolicy="off" horizontalScrollPolicy="off" 
	implements="mx.core.IDataRenderer, mx.controls.listClasses.IListItemRenderer">
 
	<mx:Script>
		<![CDATA[
			import myvocal.*;
			import mx.controls.TextInput;
 
			private var dataChanged = false;
			private var folderIntroInput:TextInput;
 
			public override function set data(value:Object):void
			{
				super.data = value;
				dataChanged = true;
				validateProperties();
			}
 
 
			protected override function commitProperties():void
			{
				super.commitProperties();
 
				if(dataChanged)
				{
					removeEditor();
					createEditor();
					dataChanged = false;
				}
			}
 
 
			private function createEditor():void
			{
				var vo:CFolder = data as CFolder
				if(vo)
				{
					folderIntroInput = new TextInput();
					folderIntroInput.width = width;
					folderIntroInput.height = height;
					addChild(folderIntroInput);
					folderIntroInput.text = vo.nIntro;
 
					//give focus
					folderIntroInput.setFocus();
				}
			}
 
			private function removeEditor():void
			{
				if(folderIntroInput)
				{
					removeChild(folderIntroInput);
					folderIntroInput = null
				}
			}
 
 
			/**
			 * AdvancedDataGrid will fetch new value from this interface to update dataprovider
			 */ 
			public function get newData():Object
			{
				var nd:String = "";
				if(folderIntroInput)
				{
					nd = folderIntroInput.text;
				}
				trace(nd)
				return nd;
			}
 
		]]>
	</mx:Script>
 
</mx:Canvas>

来些饭后添点吧:

commitProperties方法只要是property被赋值就会触发,所以放了个dataChanged布尔值,只有当data被赋值的时候(说明ItemEditor被触发了哦),才需要去做点事情,比如画个输入框什么的。这里你就可以控制了,根据data的内容来选择画还是不画(不画的结果就是空白Canvas)。还有newData属性,这个属性是被AdvancedDataGrid调用的,当完成输入后需要讲新值返回回去,记得AdvancedDataGridColumn的editorDataField属性么,就是它。

<mx:AdvancedDataGridColumn headerText="Intro" dataField="nIntro" sortable="false" editorDataField="newData" itemEditor="myvocal.visual.IntroField"/>

转自:http://gain-loss.org/?p=380

分享到:
评论

相关推荐

    Flex itemEditor详解

    这意味着在同一时间,屏幕上只会显示一个`itemEditor`实例,即当前正在编辑的那个列表项。此外,只有当用户聚焦到某一行或单元格时,`itemRenderer`才会被隐藏,取而代之的是`itemEditor`。 ##### 2.2 内联...

    Flex教程之DataGrid用法

    DataGrid1.columns = [column1, column2, column3]; ``` #### 四、数据绑定 数据绑定是`DataGrid`的关键功能之一,它允许自动地显示和更新数据源中的数据。 ##### 数据源设置 无论是使用MXML还是ActionScript,都...

    flex datagrid

    Flex DataGrid 是 Adobe Flex 中一个重要的组件,用于展示结构化数据。它以表格形式呈现,非常适合用来显示多列数据,并提供了排序、选择、编辑等多种功能。在这个教程中,我们将深入探讨 DataGrid 的基本使用和一些...

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

    通过解压,我们可以看到一系列的Python脚本文件,这些文件分别承担着不同的功能,构建了一个完整的系统架构。以下是根据提供的文件名解析出的相关知识点: 1. **README.md**: 这个文件通常包含了项目的基本信息、...

    FLEX中DATAgird的学习

    要实现这一功能,需要设置 `editorDataField`、`itemEditor` 和 `itemRenderer` 三个关键属性。 `editorDataField` 属性定义了项目编辑器中包含新数据的属性名。默认情况下,如果 `itemEditor` 是 `TextInput`,...

    D2 1.10物品修改器.rar

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

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

    OTItemEditor 是一个用于编辑 OpenTibia 服务器和工具使用的 OTB 数据文件的程序,用于将客户端使用的项目 ID 映射到服务器和工具使用的一组一致的 ID。 这是必要的,因为 CIPSoft 会在每个主要版本发布时更改...

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

    创建一个ItemEditor,它可以处理含有复杂数据类型的Data 7.6.节.使用项渲染器把SWF对象作为一个菜单项显示 7.7.节.用一个复选框渲染器选择DataGrid 列 7.8.节.为DataGrid创建一个独立的复选框项渲染器 7.9.节.为渲染...

    Flex Datagrid checkbox实现

    1. **创建自定义Renderer**:首先,我们需要创建一个新的MXML组件,继承自mx.controls.CellRenderer或spark.components.gridClasses.GridColumn。在这个组件中,我们将包含一个CheckBox组件。 ```mxml ``` 2. ...

    Flex DataGrid组件 使用详解

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

    flex datagril 控件源码

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

    qwt examples

    qwt(Quantum Well Tuning)是一个用于Qt(一个跨平台的C++图形用户界面应用程序开发框架)的扩展库,它提供了一套用于科学和技术可视化应用程序的控件和组件。它广泛应用于需要复杂图表和图形显示的软件中,比如...

    Flex教程DataGrid归类.pdf

    - Flex是一种基于标准的开发技术,用于构建具有表现力的Web应用程序,这些应用程序可以部署在多个浏览器、平台和设备上。 - MXML是Flex应用程序中用于创建用户界面的一种标记语言,它类似于HTML,但专为富互联网...

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

    5. itemEditor.py:物品编辑器模块,可能用于添加、修改和删除库存物品的信息,是库房管理的核心功能之一。 6. typeManager.py:类型管理器模块,可能用于管理库存物品的类别,方便按照类别进行统计和查询。 7. ...

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

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

Global site tag (gtag.js) - Google Analytics