`
ch19880311
  • 浏览: 27503 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
阅读更多
Flex AdvancedDataGrid有一个bug,当浏览器最大化时,datagrid处于可编辑状态,并且datagrid中有多条数据,最好在有滚动条出现,当你编辑靠下面的数据时(光标停留在编辑框内),这时候双击浏览器,还原。会出现前台bug(有安装flash debug版本的可以看到Alert)。
错误代码如下:
TypeError: Error #1010: A term is undefined and has no properties.
	at mx.controls::AdvancedDataGridBaseEx/makeRowsAndColumns()[E:\dev\4.x\frameworks\projects\datavisualization\src\mx\controls\AdvancedDataGridBaseEx.as:2220]
	at mx.controls::AdvancedDataGrid/makeRowsAndColumns()[E:\dev\4.x\frameworks\projects\datavisualization\src\mx\controls\AdvancedDataGrid.as:1999]
	at mx.controls.listClasses::AdvancedListBase/makeRowsAndColumnsWithExtraRows()[E:\dev\4.x\frameworks\projects\datavisualization\src\mx\controls\listClasses\AdvancedListBase.as:4002]
	at mx.controls.listClasses::AdvancedListBase/updateDisplayList()[E:\dev\4.x\frameworks\projects\datavisualization\src\mx\controls\listClasses\AdvancedListBase.as:3574]
	at mx.controls::AdvancedDataGridBaseEx/updateDisplayList()[E:\dev\4.x\frameworks\projects\datavisualization\src\mx\controls\AdvancedDataGridBaseEx.as:2016]
	at mx.controls::AdvancedDataGrid/updateDisplayList()[E:\dev\4.x\frameworks\projects\datavisualization\src\mx\controls\AdvancedDataGrid.as:2899]
	at com.sft.gec.component.common::BaseAdvancedDataGrid/updateDisplayList()[C:\ccsnapshort_views\e515896_DEV_gec_was_04.00_pchz_tc\ssgm03\gec_was\src\gec\WebContent\WEB-INF\flex\user_classes\com\sft\gec\component\common\BaseAdvancedDataGrid.as:93]
	at mx.controls.listClasses::AdvancedListBase/validateDisplayList()[E:\dev\4.x\frameworks\projects\datavisualization\src\mx\controls\listClasses\AdvancedListBase.as:3472]
	at mx.managers::LayoutManager/validateDisplayList()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:663]
	at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:736]
	at mx.managers::LayoutManager/validateNow()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:795]
	at mx.core::Application/resizeHandler()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\Application.as:1683]
	at mx.core::Application/commitProperties()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\Application.as:1073]
	at mx.core::UIComponent/validateProperties()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\UIComponent.as:7933]
	at mx.managers::LayoutManager/validateProperties()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:572]
	at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:730]
	at mx.managers::LayoutManager/validateNow()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:795]
	at mx.core::Application/resizeHandler()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\Application.as:1683]
	at flash.events::EventDispatcher/dispatchEventFunction()
	at flash.events::EventDispatcher/dispatchEvent()
	at mx.managers::SystemManager/Stage_resizeHandler()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\SystemManager.as:2971]

这个原因是因为在调用updateDisplayList时,itemEditorInstance和editedItemPosition不为空引起的。
解决方法:
	import flash.events.Event;
	import mx.events.AdvancedDataGridEventReason;
	import mx.events.AdvancedDataGridEvent;

	public class BaseAdvancedDataGrid extends AdvancedDataGrid {
		
		private var resizeHandling:Boolean = false;
		
		public function BaseAdvancedDataGrid()
		{
						/**
			 * UI function break when editing a item(cusor focus in) and dobule click IE browser 
			 */
			addEventListener(Event.RESIZE, changeWindowSizeHandler, false, 0, true);
		}
		
		/**
		 * UI function break when editing a item(cusor focus in) and dobule click IE browser 
		 */
		override protected function updateDisplayList(unscaledWidth:Number,unscaledHeight:Number):void{
			if(super.itemEditorInstance!=null&&resizeHandling==true){
	    		super.itemEditorInstance = null;
	    		super.editedItemPosition = null;
	    	}
			super.updateDisplayList(unscaledWidth,unscaledHeight);
		}
		private function changeWindowSizeHandler(event:Event):void {
			
			if(super.itemEditorInstance!=null){
				resizeHandling = true;
				super.endEdit(AdvancedDataGridEventReason.OTHER);
				resizeHandling = false;
			}
		}
}

该类继承AdvancedDataGrid 并监听RESIZE事件,当resize事件触发时,判断当datagrid正在被编辑,那么就结束编辑。之所以重写updateDisplayList这个方法,是因为,有些editor item并不是简单的text input,而是复杂的组件,比如多选下拉框,当这个被编辑并还原窗口时,会在endEdit方法中会调用remove child方法,而这个方法同样会调用updateDisplayList,所以还是会报相应的错误,所以针对这种情况,直接将super.itemEditorInstance 和super.editedItemPosition 置为空。
1
0
分享到:
评论

相关推荐

    Flex应用AdvancedDataGrid表头皮肤

    在Flex开发中,AdvancedDataGrid组件是用于展示大量复杂数据的高级网格控件。它提供了比基本DataGrid更丰富的功能,如多级表头、排序、分组、过滤和自定义渲染等。本文将深入探讨Flex应用中的AdvancedDataGrid表头...

    FLEX AdvancedDataGrid 复选框

    在IT行业中,AdvancedDataGrid是Flex(Adobe Flex)框架中一个强大的数据网格组件,用于显示大量结构化的数据。它提供了高级的数据呈现功能,比如分组、排序、过滤和自定义渲染。本文将深入探讨“FLEX ...

    flex advancedDataGrid 中如何实现带checkbox的树

    在Flex开发中,AdvancedDataGrid组件是一个功能强大的数据网格,它可以显示层次结构的数据,并提供了丰富的定制选项。在一些应用场景中,我们可能需要在AdvancedDataGrid中实现带有复选框的树形结构,以便用户可以...

    Flex技术中AdvancedDataGrid使用方法

    ### Flex技术中AdvancedDataGrid使用方法 #### 一、多列排序 在默认情况下,`AdvancedDataGrid`组件会按照数据被添加至其`DataProvider`的顺序来展示数据。与`DataGrid`组件类似,`AdvancedDataGrid`也支持用户在...

    flex AdvancedDataGrid实现checkBox全选功能

    在Flex开发中,AdvancedDataGrid是一款强大的数据网格组件,它提供了丰富的数据展示和交互功能,如排序、分组、过滤等。在实际应用中,我们经常需要为用户提供选择多条数据的能力,这时CheckBox的选择功能就显得尤为...

    flex 使用AdvancedDataGrid组件的课件管理系统

    在Flex开发环境中,AdvancedDataGrid组件是一个强大的数据展示工具,尤其适用于处理大量复杂数据的网格显示。本课件管理系统就是基于这个组件构建的,旨在提供一个基础的平台,用于管理和浏览课件信息。下面将详细...

    flex-datagrid-advancedDataGrid-demo

    在Flex编程领域,数据网格(DataGrid)是用于展示大量结构化数据的组件,而AdvancedDataGrid则是DataGrid的一个增强版,提供了更为丰富的功能和更高级的定制能力。本示例"flex-datagrid-advancedDataGrid-demo"显然...

    flex导出excel的代码

    <![CDATA[ import mx.controls.CheckBox; import mx.controls.Alert; import com.as3xls.xls.ExcelFile;... Alert.show("行的数据分别是:"+o.idx+"/"+o.names+"/"+o.sex);...</mx:WindowedApplication>

    AdvancedDataGrid综合应用

    在Flex开发中,AdvancedDataGrid是一个强大的组件,它扩展了基本的DataGrid,提供了更复杂的数据展示和交互功能。这个主题涵盖了如何在Flex项目中有效地利用AdvancedDataGrid来实现数据的高级显示和操作。 1. **...

    flex css设计器

    Flex CSS设计器是一款基于Flash技术的工具,专门用于帮助开发者对Flex应用程序中的用户界面控件进行CSS样式设计。这款工具提供了一个可视化的环境,使得设计师和开发者能够更直观、便捷地调整Flex控件的外观和布局,...

    Flex中AdvancedDataGrid的用法示例介绍

    在Flex开发中,AdvancedDataGrid组件是一个常用的显示表格数据的组件,其功能比基础的DataGrid组件更为强大,支持更加复杂的数据显示需求,例如显示多层表头、支持拖拽排序等。在某些情况下,当需要展示具有复杂数据...

    Flex 全选效果 批量删除

    在Flex编程中,AdvancedDataGrid和DataGrid是两种常用的组件,用于展示数据并提供交互功能。本示例项目“Flex全选效果批量删除”聚焦于如何实现这些组件的一个实用功能,即用户可以通过全选复选框来一次性选择多个...

    AdvancedDataGrid datavisualization.swc

    flex datavisualization.swc flex 3 AdvancedDataGrid

    最新的AdvancedDataGrid行嵌套AdvancedDataGrid实现

    最新的AdvancedDataGrid行嵌套AdvancedDataGrid实现,该例子只是实现AdvancedDataGrid利用AdvancedDataGridRendererProvider在行中渲染另外一个AdvancedDataGrid,当然也可以渲染其它任何想渲染的界面或者组件,价值...

    AdvancedDataGrid或datagrid导出到excel.rar

    AdvancedDataGrid或datagrid导出到excel.rar AdvancedDataGrid或datagrid导出到excel.rar AdvancedDataGrid或datagrid导出到excel.rar

    AdvancedDataGrid 动态添加节点 控制树

    在Flex开发中,AdvancedDataGrid是一个强大的组件,用于展示大量数据并进行复杂的数据操作,如分组、排序和过滤。这个组件特别适用于构建数据密集型的用户界面,尤其是在需要显示层次结构数据时。本篇文章将深入探讨...

    Flex--AdvanceDataGrid(列头筛选功能,含ComboBox列、Button列、Checkbox列等)修正版

    在Flex中,AdvancedDataGrid组件是一个强大的数据网格控件,用于显示和操作大量数据,通常用于企业级应用。这个“Flex--AdvanceDataGrid(列头筛选功能,含ComboBox列、Button列、Checkbox列等)修正版”是针对...

    flex DataGrid 表头分组

    3. **配置`AdvancedDataGrid`组件**:Flex中的`AdvancedDataGrid`相对于基础的`DataGrid`提供了更丰富的功能,包括表头分组。在`AdvancedDataGrid`中,我们需要设置`<mx:columns>`子元素来定义列,并为需要分组的列...

    felx AdvancedDataGrid 多选框 单选框

    非常好用的 felx AdvancedDataGrid 多选框 单选框支持渲染器,不需改到AdvancedDataGrid 代码; 支持 xml 数据源的网上可查到一些, 但这个可是 支持 Array 类型数据源的。

    AdvancedDataGrid动态加载.rar

    在Flex 3中,AdvancedDataGrid控件是一个强大的数据展示组件,特别适合处理大量数据集。这个"AdvancedDataGrid动态加载.rar"压缩包文件显然包含了能够直接运行的代码示例,用于演示如何实现AdvancedDataGrid的动态...

Global site tag (gtag.js) - Google Analytics