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 置为空。
分享到:
相关推荐
在Flex开发中,AdvancedDataGrid组件是用于展示大量复杂数据的高级网格控件。它提供了比基本DataGrid更丰富的功能,如多级表头、排序、分组、过滤和自定义渲染等。本文将深入探讨Flex应用中的AdvancedDataGrid表头...
在IT行业中,AdvancedDataGrid是Flex(Adobe Flex)框架中一个强大的数据网格组件,用于显示大量结构化的数据。它提供了高级的数据呈现功能,比如分组、排序、过滤和自定义渲染。本文将深入探讨“FLEX ...
在Flex开发中,AdvancedDataGrid组件是一个功能强大的数据网格,它可以显示层次结构的数据,并提供了丰富的定制选项。在一些应用场景中,我们可能需要在AdvancedDataGrid中实现带有复选框的树形结构,以便用户可以...
### Flex技术中AdvancedDataGrid使用方法 #### 一、多列排序 在默认情况下,`AdvancedDataGrid`组件会按照数据被添加至其`DataProvider`的顺序来展示数据。与`DataGrid`组件类似,`AdvancedDataGrid`也支持用户在...
在Flex开发中,AdvancedDataGrid是一款强大的数据网格组件,它提供了丰富的数据展示和交互功能,如排序、分组、过滤等。在实际应用中,我们经常需要为用户提供选择多条数据的能力,这时CheckBox的选择功能就显得尤为...
在Flex开发环境中,AdvancedDataGrid组件是一个强大的数据展示工具,尤其适用于处理大量复杂数据的网格显示。本课件管理系统就是基于这个组件构建的,旨在提供一个基础的平台,用于管理和浏览课件信息。下面将详细...
在Flex编程领域,数据网格(DataGrid)是用于展示大量结构化数据的组件,而AdvancedDataGrid则是DataGrid的一个增强版,提供了更为丰富的功能和更高级的定制能力。本示例"flex-datagrid-advancedDataGrid-demo"显然...
<![CDATA[ import mx.controls.CheckBox; import mx.controls.Alert; import com.as3xls.xls.ExcelFile;... Alert.show("行的数据分别是:"+o.idx+"/"+o.names+"/"+o.sex);...</mx:WindowedApplication>
在Flex开发中,AdvancedDataGrid是一个强大的组件,它扩展了基本的DataGrid,提供了更复杂的数据展示和交互功能。这个主题涵盖了如何在Flex项目中有效地利用AdvancedDataGrid来实现数据的高级显示和操作。 1. **...
Flex CSS设计器是一款基于Flash技术的工具,专门用于帮助开发者对Flex应用程序中的用户界面控件进行CSS样式设计。这款工具提供了一个可视化的环境,使得设计师和开发者能够更直观、便捷地调整Flex控件的外观和布局,...
在Flex开发中,AdvancedDataGrid组件是一个常用的显示表格数据的组件,其功能比基础的DataGrid组件更为强大,支持更加复杂的数据显示需求,例如显示多层表头、支持拖拽排序等。在某些情况下,当需要展示具有复杂数据...
在Flex编程中,AdvancedDataGrid和DataGrid是两种常用的组件,用于展示数据并提供交互功能。本示例项目“Flex全选效果批量删除”聚焦于如何实现这些组件的一个实用功能,即用户可以通过全选复选框来一次性选择多个...
flex datavisualization.swc flex 3 AdvancedDataGrid
最新的AdvancedDataGrid行嵌套AdvancedDataGrid实现,该例子只是实现AdvancedDataGrid利用AdvancedDataGridRendererProvider在行中渲染另外一个AdvancedDataGrid,当然也可以渲染其它任何想渲染的界面或者组件,价值...
AdvancedDataGrid或datagrid导出到excel.rar AdvancedDataGrid或datagrid导出到excel.rar AdvancedDataGrid或datagrid导出到excel.rar
在Flex开发中,AdvancedDataGrid是一个强大的组件,用于展示大量数据并进行复杂的数据操作,如分组、排序和过滤。这个组件特别适用于构建数据密集型的用户界面,尤其是在需要显示层次结构数据时。本篇文章将深入探讨...
在Flex中,AdvancedDataGrid组件是一个强大的数据网格控件,用于显示和操作大量数据,通常用于企业级应用。这个“Flex--AdvanceDataGrid(列头筛选功能,含ComboBox列、Button列、Checkbox列等)修正版”是针对...
3. **配置`AdvancedDataGrid`组件**:Flex中的`AdvancedDataGrid`相对于基础的`DataGrid`提供了更丰富的功能,包括表头分组。在`AdvancedDataGrid`中,我们需要设置`<mx:columns>`子元素来定义列,并为需要分组的列...
非常好用的 felx AdvancedDataGrid 多选框 单选框支持渲染器,不需改到AdvancedDataGrid 代码; 支持 xml 数据源的网上可查到一些, 但这个可是 支持 Array 类型数据源的。
在Flex 3中,AdvancedDataGrid控件是一个强大的数据展示组件,特别适合处理大量数据集。这个"AdvancedDataGrid动态加载.rar"压缩包文件显然包含了能够直接运行的代码示例,用于演示如何实现AdvancedDataGrid的动态...