Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30468346
  • 博文数量: 708
  • 博客积分: 12163
  • 博客等级: 上将
  • 技术积分: 8240
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-04 20:59
文章分类

全部博文(708)

分类: 系统运维

2008-08-27 18:29:58

继续第三部分,我们继续来讲AdvancedDataGrid的使用。

在AdvancedDataGrid中使用条目渲染器(item renderers)

您可以通过创建自定义的条目渲染器(item renderers)或者条目编辑器(item editors)来定制AdvancedDataGrid中单元格的外观和行为。与DataGrid处理的方法类似,我们直接将条目渲染器(item renderers)或者条目编辑器(item editors)赋值给AdvancedDataGrid的列就可以了。关于 item renderers 和 item editors的更多介绍,请查看: 。

AdvancedDataGrid在对于项目渲染器的支持上增加了一些新的特性,这些新的特性可以让您处理下面的操作:

  • 创建非关联数据源数据的行或列。例如,您可以从数据源创建汇总行。
  • 一个渲染器跨越多个列。
  • 单列使用多个渲染器。例如,当显示分层数据时,基于分层中的级别同一列使用不同的渲染器。

注意:这些新的特性只支持项目渲染器;项目编辑器的用法和DataGrid中的用法相同。

使用项目渲染器

要使用AdvancedDataGrid控件中新的项目渲染器特性,您需要直接使用AdvancedDataGrid.rendererProviders属性将项目渲染器指定给AdvancedDataGrid控件本身,而不是像DataGrid中,指定给特定列。下面的示例中指定一个项目渲染器给Estimate列:

>
>
dataField="Region"/>
dataField="Territory_Rep"
headerText="Territory Rep"/>

dataField="Actual"/>
dataField="Estimate"/>
>


>


columnIndex="3"
columnSpan="1"
renderer="myComponents.EstimateRenderer"/>

>

>

rendererProviders属性包含一个AdvancedDataGridRendererProvider实例数组。每个AdvancedDataGridRendererProvider实例定义一个项目渲染器个特性。

在前面的示例中,AdvancedDataGridRendererProvider实例表示,对于第3列使用EstimateRenderer,AdvancedDataGrid控件中的首列是列0,并且该渲染器跨越单列。如果您将columnSpan属性设置为0,该渲染器将横跨行的所有列。

不但可以将列索引指定渲染器,您还可以给某列指定一个id属性,然后将该列属性来将该列与渲染器关联。如下所示:

>
>
dataField="Region"/>
dataField="Territory_Rep"
headerText="Territory Rep"/>

dataField="Actual"/>
id="estCol" dataField="Estimate"/>
>


>


column="{estCol}"
columnSpan="1"
renderer="myComponents.EstimateRenderer"/>

>

>

depth属性使得您可以将渲染器与AdvancedDataGrid控件的导航树层次结构中的特定层次关联,导航树的最顶级depth为1。下面示例将渲染器与导航树第三层关联:

>

columnIndex="3"
depth="3"
columnSpan="1"
renderer="myComponents.EstimateRenderer"/>

>

在前面的示例中,AdvancedDataGrid控件将一直使用缺省的列渲染器直到您将导航树展开到第三层,这时候它才使用EstimateRenderer组件。您可以使用depth属性为同一列指定不同的渲染器,在depth属性指定树的每个层次使用的渲染器。

一个渲染器可以跨越多个列。在下面的示例中,您创建了一个横跨两列的渲染器:




headerText="Territory Rep"/>





column="{actCol}"
depth="3"
columnSpan="2"
renderer="myComponents.SummaryRenderer"/>

前面示例使用单个渲染器跨越Actual和Estimate列来显示一个这些列数据的组合视图。要查看SummaryRenderer组件的某个实现,请查看“使用渲染器生成列数据”。

下表是AdvancedDataGridRendererProvider类中您可以用来配置渲染器的属性的描述:

属性

描述

column

使用渲染器的列的ID。如果您省略该属性,您可以使用columnIndex 属性来标识列。

columnIndex

使用渲染器的列索引,第一列的索引为0。

columnSpan

渲染器跨越的列数目。设置该属性为0表示横跨所有的列。缺省值为1。

dataField

给渲染器使用的数据源中的数据字段。该属性可选。

depth

在树的哪个深度使用渲染器,树的最顶级节点的深度为1。当只在树被展开到特定深度而不是在树中所有的节点使用渲染器时使用该属性。缺省情况下,该控件在树的所有级别使用渲染器。

renderer

渲染器。

rowSpan

渲染器跨越的行数,缺省值为1。

使用渲染器生成列数据

下面示例使用一个项目渲染器来计算AdvancedDataGrid控件列的差额,如下图片所示:

该示例定义了id为diffCol的列,该列不和数据源的任意数据字段关联。相应的,您使用rendererProvider 属性给列指定一个项目渲染器。该项目渲染器计算actual和estimate的差值,并将接着显示一个是否超过预算的消息。

下面的代码实现该示例:

 version="1.0"?>
xmlns:mx="">

>

import mx.collections.ArrayCollection;

include "SimpleHierarchicalData.as";
]]>

>


width="100%" height="100%">
>

source="{dpHierarchy}"/>
>

>
dataField="Region"/>
dataField="Territory_Rep"
headerText="Territory Rep"/>

dataField="Actual"/>
dataField="Estimate"/>
id="diffCol"
headerText="Difference"/>

>


>

column="{diffCol}"
depth="3" renderer="myComponents.SummaryRenderer"/>

>

>

>

以下是SummaryRenderer组件的代码:

"1.0"?>

Label xmlns:mx="" textAlign="center">

[CDATA[

override public function set data(value:Object):void
{
// Calculate the difference.
var diff:Number =
Number(value["Actual"]) - Number(value["Estimate"]);
if (diff < 0)
{
// If Estimate was greater than Actual,
// display results in red.
setStyle("color", "red");
text = "Undersold by " + usdFormatter.format(diff);
}
else
{
// If Estimate was less than Actual,
// display results in green.
setStyle("color", "green");
text = "Exceeded estimate by " + usdFormatter.format(diff);
}
}
]]>


"usdFormatter" precision="2"
currencySymbol="$" decimalSeparatorFrom="."
decimalSeparatorTo="." useNegativeSign="true"
useThousandsSeparator="true" alignSymbol="left"/>

阅读(2792) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~