`
Robin1320
  • 浏览: 38946 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

使用DataGrid中扩展ItemRenderer和HeaderRenderer

    博客分类:
  • Flex
阅读更多

如果仅仅只是简单的显示数据,或者对显示数据做一些格式化操作,基本的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;
}
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;
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"/>
<gantt:GanttAdvancedDataGridColumn id="ganttColumn" headerText="Gantt" itemRenderer="{ganttItemEditor}" headerRenderer="{ganttHeaderEditor}" minWidth="400"/>

这样,就可以在application初始化的时候,在外部对此Column进行设置:
复制代码 代码如下:
ganttColumn.startDate = new Date(startTime);
ganttColumn.lastDate = new Date(lastTime);
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();
}
}
}
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 );
}
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"/>
<mx:AdvancedDataGridColumn headerText="startTime" dataField="startTime" labelFunction="date_labelFunc" width="120"/>

分享到:
评论

相关推荐

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

    总结来说,DataGrid中的ItemRenderer和HeaderRenderer提供了强大的扩展点,使得开发者可以自由地定制数据的展示方式。在需要进行图形绘制时,通过实现IDropInListItemRenderer接口并扩展DataGridColumn对象,可以...

    DataGrid的itemRenderer and HeaderRenderer

    实现多选功能时,除了在`itemRenderer`中使用`CheckBox`,还需要维护一个记录已选中项的数组。每次`CheckBox`的`change`事件触发时,更新这个数组。在处理全选/全取消选择时,也要同步这个数组。此外,还可以添加一...

    Flex itemRenderer的详细教程

    这种类型的 ItemRenderer 主要在简单的应用中使用,它能够快速地为列表中的每一项提供基本的样式和布局。 **示例代码:** ```xml &lt;mx:DataGrid id="dgBooks" width="100%" height="100%"&gt; &lt;mx:itemRenderer&gt; ...

    flex as actionscript datagrid 背景色 flash itemRenderer script iframe overrider 跳转到别的页面

    6. **IFrame overrider**: 这可能是指在ItemRenderer中使用IFrame元素来加载外部网页内容。IFrame可以作为一个容器,将其他网页嵌入到Flex应用中,这样用户可以直接在DataGrid的一个单元格内浏览其他页面。 7. **...

    FLEX4实践—动态生成DataGrid及应用客户化itemRenderer.doc

    `itemRenderer`是`DataGrid`中每个单元格的可视化表示,可以定制单元格的外观和行为。在这个例子中,针对`DATE`类型的列,我们可以创建一个自定义的`itemRenderer`类,该类能够接收日期对象并将其转化为用户友好的...

    WPF MVVM 模式使用DataGrid

    **在MVVM中使用DataGrid** 1. **数据绑定**:在MVVM中,DataGrid的数据源通常通过ViewModel中的ObservableCollection对象进行绑定。ObservableCollection是.NET Framework提供的一种动态数据集合,当集合中的元素...

    WPF_MVVM中DataGrid列中使用ComBox绑定

    总结来说,WPF MVVM中在DataGrid列中使用ComBox绑定,需要理解DataGrid、DataTemplate、ComBox以及MVVM的双向绑定原理。通过定义ViewModel、设置DataGrid和ComBox的绑定属性,以及处理命令,我们可以实现用户在...

    DataGrid中嵌套DataGrid

    3. 绑定数据源:使用DataSourceID属性将DataGrid与数据源关联,或者在代码-behind中使用DataBind()方法手动绑定。 4. 自定义列和样式:通过设置Columns属性来指定显示哪些字段,以及如何格式化它们。 对于嵌套...

    DataGrid中嵌入comBox

    在Windows Presentation Foundation(WPF)开发中,DataGrid控件是一种强大的工具,用于展示和编辑表格数据。在某些场景下,我们可能需要在DataGrid的某一列中嵌入ComboBox控件,以提供用户多选或者下拉选择的功能。...

    使用DataGrid完成一个行级数据折叠收缩展示的功能

    本文将详细介绍如何使用DataGrid实现行级数据的折叠和展开功能,以便在用户界面中以更直观的方式展示数据的层级关系。 首先,理解DataGrid的基本结构。DataGrid通常绑定到一个数据源,如ObservableCollection或...

    给DataGrid自定义Header功能

    在提供的`CustomDataGridHeader`文件中,可能包含了实现这一功能的具体代码示例,包括自定义HeaderRenderer组件的定义、配置DataGrid的列定义以及可能的样式和交互逻辑。通过查看和学习这个示例,你可以更深入地了解...

    easyui的datagrid中editor和combogrid的结合使用

    #### 三、在datagrid中使用combogrid作为editor 在本案例中,作者希望实现在datagrid中编辑某列数据时,使用combogrid作为编辑器的功能。具体来说,当用户选择一个分类时,能够自动显示出该分类对应的价格和单位...

    flex itemRenderer 渲染机制的概念和使用

    在itemRenderer中,我们可以使用数据绑定来访问当前项的数据。`data`变量会自动赋值为当前渲染的数据项。例如,如果数据项包含一个名为`title`的属性,可以这样绑定: ```xml ``` 4. **事件处理** ...

    Flex中DataGrid和其它控件使用

    5. **HeaderRenderer**和**ItemRenderer**:这两个组件允许我们自定义DataGrid的列头和单元格的外观和行为,以满足特定的界面设计需求。 6. **Sort功能**:DataGrid支持单击列头进行排序,可以自定义排序逻辑。在...

    DataGrid 中加入图标

    在Web开发中,例如使用ASP.NET MVC或Vue.js,我们可以在HTML模板或Vue组件中使用条件渲染来添加图标。对于React,可以使用`&lt;img&gt;`标签或图标库如FontAwesome来实现。 无论使用哪种技术,关键在于理解DataGrid或类似...

    在DataGrid中使用CheckBox,实现全选功能

    这篇博客“在DataGrid中使用CheckBox,实现全选功能”详细介绍了如何实现这一需求。 首先,我们需要在DataGrid的列定义中添加一个CheckBox列。在WPF中,可以使用DataGridTemplateColumn来自定义列模板,将CheckBox...

    easyui的datagrid中editor和combobox的级联

    ### easyui的datagrid中editor和combobox的级联 在前端开发中,easyui是一个非常实用的库,它提供了一套完整的用户界面组件,能够帮助开发者快速构建出功能丰富的Web应用。其中,`datagrid`是easyui提供的一个重要...

    WPF DataGrid 中显示图片的小例子

    在Windows Presentation Foundation (WPF) 中,DataGrid控件是一个非常强大的数据展示工具,它可以用于显示和编辑结构化的数据。...希望这个教程对你在实际项目中使用WPF DataGrid展示图片有所帮助。

    vb中datagrid控件的详细使用方法

    在本教程中,我们将深入探讨`DataGrid`控件的详细使用方法,帮助你更好地理解和应用这个工具。 1. **添加DataGrid控件** 在VB中,你可以通过工具箱(Toolbox)来添加`DataGrid`控件到窗体(Form)。只需从工具箱中...

Global site tag (gtag.js) - Google Analytics