当前位置: 首页 > news >正文

使用DataGrid中扩展ItemRenderer和HeaderRenderer进行操作

这两天在用Flex DataGrid做点东西,走了不少弯路,现将心得分享一下。

如果仅仅只是简单的显示数据,或者对显示数据做一些格式化操作,基本的DataGrid,加labelFunction支持就可以满足了,但大多我们需要针对不同的数据和对象,进行不同的渲染,比如checkbox啦,下拉选择框,日期等等,再比如自己控制显示复杂视图,比如Gantt图之类。这就必须扩展ItemRenderer和HeaderRenderer。

(1)有关ItemRenderer的类实现IDataRenderer和IDropInListItemRenderer接口。

很多flex control类都默认实现了IDataRenderer接口,比如Button、Container、TextArea等等。很多flex control类也实现了IDropInListItemRenderer接口,但可惜Container没有默认实现。而我做的东西,需要绘图,所以直接利用Canvas扩展,就必须自己实现IDropInListItemRenderer接口,来获取ListData对象。

private var _listData:BaseListData; // Make the listData property bindable. [Bindable("dataChange")] public function get listData():BaseListData { return _listData; } public function set listData(value:BaseListData):void { _listData = value; }

可惜俺刚开始不知道之个,所以耗费了很长时间,花费在寻找如何获取当前Column index问题上。

这样,我才可以在setData方法中,获取到DataGridColumn对象,如下(我使用的是AdvancedDataGrid对象):

var dg:AdvancedDataGrid = this.owner as AdvancedDataGrid; //listData就是实现IDropInListItemRenderer接口所可以获取的 var gdgc:GanttAdvancedDataGridColumn = dg.columns[listData.columnIndex] as GanttAdvancedDataGridColumn;

(2)扩展DataGridColumn对象来增加属性,传递参数。

有些属性我需要动态从外面传递进来,但有不属于list data数据的部分。而Grid Header需要利用这些数据做一些渲染操作。这时候就需要扩展实现DataGridColumn对象,同时在HeaderRenderer对象中获取此DataGridColumn对象来获取参数。

如下是扩展的一个AdvanceDataGridColumn使用,在这个扩展中,增加了startDate和lastDate两个属性

<gantt:GanttAdvancedDataGridColumn id="ganttColumn" headerText="Gantt" itemRenderer="{ganttItemEditor}" headerRenderer="{ganttHeaderEditor}" minWidth="400"/>


这样,就可以在application初始化的时候,在外部对此Column进行设置:

ganttColumn.startDate = new Date(startTime); ganttColumn.lastDate = new Date(lastTime);

在HeaderRenderer中,在setData方法中,可以获取相应的对象和参数

override public function set data(value:Object):void{ super.data = value; var advancedDataGridColumn:GanttAdvancedDataGridColumn = value as GanttAdvancedDataGridColumn; if(advancedDataGridColumn!=null){ if(advancedDataGridColumn.startDate!=null){ startDate = advancedDataGridColumn.startDate; lastDate = advancedDataGridColumn.lastDate; render(); } } }

(3)利用labelFunction进行显示数据格式化

比如我想对日期数据进行格式化操作,如下所示:

private function date_labelFunc(item:Object, column:AdvancedDataGridColumn):String { var dateFormatter:DateFormatter = new DateFormatter(); dateFormatter.formatString = "YYYY-MM-DD HH:NN"; var td:Date = new Date( new Number(item[column.dataField]) ); return dateFormatter.format( td ); }

在mx的datagridcolumn中,就可以引用这个label function

<mx:AdvancedDataGridColumn headerText="startTime" dataField="startTime" labelFunction="date_labelFunc" width="120"/>

相关文章:

  • 关于软件架构的一点思考
  • 在推广单元测试过程中发现的雷人问题
  • JAVA开发环境配置---JDK的安装与配置
  • Java与C#的垃圾回收机制
  • 在UltraWebGrid单元格中绑定WebNumericEdit或其它可编辑控件
  • 正确编写概要设计...
  • HTML5 本地存储DEMO ---localStorage
  • 倘不能独善其身,何谈兼济天下——外企是?
  • 下载和安装jadclipse
  • java中使用protobuf序列化(反序列化)
  • 《软件开发的边界-管理成功的项目》
  • 二叉排序树与二叉堆
  • 再谈外企是——回复一位网友
  • AutoResetEvent WaitOne和Set使用实例
  • 《代码之道》
  • Android开源项目规范总结
  • E-HPC支持多队列管理和自动伸缩
  • es6要点
  • JavaScript DOM 10 - 滚动
  • leetcode98. Validate Binary Search Tree
  • springboot_database项目介绍
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • webgl (原生)基础入门指南【一】
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 聊聊directory traversal attack
  • 聊聊sentinel的DegradeSlot
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 如何合理的规划jvm性能调优
  • 树莓派 - 使用须知
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 数据库巡检项
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • ###STL(标准模板库)
  • (6)STL算法之转换
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (三)Honghu Cloud云架构一定时调度平台
  • (转)母版页和相对路径
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • /bin/bash^M: bad interpreter: No such file or directory
  • @KafkaListener注解详解(一)| 常用参数详解
  • [ARM]ldr 和 adr 伪指令的区别
  • [AX]AX2012 R2 出差申请和支出报告
  • [C/C++随笔] char与unsigned char区别
  • [c]扫雷
  • [Effective C++读书笔记]0012_复制对象时勿忘其每一部分
  • [IE技巧] 如何让IE 启动的时候不加载任何插件
  • [Latex学习笔记]数学公式基本命令
  • [Linux]如何理解kernel、shell、bash