`
shuaiqixiao4
  • 浏览: 54469 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
社区版块
存档分类

Flex 3 体验:AdvancedDataGrid的使用(第一部分)

    博客分类:
  • FLEX
阅读更多
今天我们要说的是官方文档中用了整章介绍的AdvancedDataGrid,AdvancedDataGrid是DataGrid的高级版本,Flex 3 SDK并不包含它,其和Charting Enhancements一起构成了Flex Data Visualization package,TNND,也就是说这是收费组件,ADOBE的生财机器。所以官方提供的SDK中并没有这个组件,不过FlexBuilder 3 Beta1内置的SDK包含了Flex Data Visualization package,这个我已经将FlexBuilder 3 Beta1内置的SDK剥离出来了,需要的朋友可以从这里下载。

相对DataGrid组件,AdvancedDataGrid主要有以下几个高级之处:

多列排序:按住Control键在点击某一列的表头来实现多列排序。
自定义行和列样式:通过设置行和列的styleFunction指向一个函数来样式化行列
显示分层数据:在组件的第一列显示一个可缩放的导航数来控制表格行的显示。
创建多列分组:将多列汇聚到同一列表头下。
使用单元渲染器(renderers):跨越多栏使用同一渲染器或者一列使用多个渲染器。
多列排序

缺省的情况下,AdvancedDataGrid是按数据添加到它的DataProvider的顺序显示数据,和DataGrid组件一样,AdvancedDataGrid也允许您在数据显示后对数据进行排序。不同的是DataGrid只能基于单列排序,而 AdvancedDataGrid支持基于多列的排序。

以下是多列排序的示例:
程序代码
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

    <mx:Script>
      <![CDATA[
         import mx.collections.ArrayCollection;
                 
         [Bindable]
         private var dpADG:ArrayCollection = new ArrayCollection([
           {Artist:'Pavement', Album:'Slanted and Enchanted', Price:12.99},
           {Artist:'Pavement', Album:'Brighten the Corners', Price:13.99},
           {Artist:'Saner', Album:'A Child Once', Price:14.99},
           {Artist:'Saner', Album:'Helium Wings', Price:12.99},
           {Artist:'The Doors', Album:'The Doors', Price:10.99},
           {Artist:'The Doors', Album:'Morrison Hotel', Price:12.99},
           {Artist:'Grateful Dead', Album:'American Beauty', Price:11.99},
           {Artist:'Grateful Dead', Album:'In the Dark', Price:17.99},
           {Artist:'Grateful Dead', Album:'Shakedown Street', Price:13.99},
           {Artist:'The Doors', Album:'Strange Days', Price:12.99},
           {Artist:'The Doors', Album:'The Best of the Doors', Price:10.99}
         ]);                 
      ]]>
    </mx:Script>

    <mx:AdvancedDataGrid width="100%" height="100%"
        dataProvider="{dpADG}">
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="Artist" />
            <mx:AdvancedDataGridColumn dataField="Album" />
            <mx:AdvancedDataGridColumn dataField="Price" />
        </mx:columns>
    </mx:AdvancedDataGrid>
</mx:Application>

运行实例
运行以上示例,如下进行排序:

点击AdvancedDataGrid组件的任意列表头对任意列进行排序,例如点击Artist列的列表头Artist列将升序进行排序,再次点击的话将按降序排序。
按住Control键,点击其他任意的列头,例如点击Price列头,将在保持Artist列降序排列的情况下,将Price列按升序排列。现在你可以从中发现某一艺术家最便宜的专辑。
再次点击Price列头,Price列将按降序排列
按住Control键,点击任意其他列,将其加入排序条件中。

自定义行列样式

通过使用AdvancedDataGrid组件的回调(callback)函数来自定义表格行列的样式,要控制某一行的样式,使用AdvancedDataGrid.styleFunction属性,要自定义某一列的样式,使用AdvancedDataGridColumn.styleFunction属性,AdvancedDataGrid.styleFunction指定的回调函数先执行,接着才执行AdvancedDataGridColumn.styleFunction属性指定的函数。

回调函数必须要有如下声明:
程序代码
public function myStyleFunction(data:Object,column:SuperDataGridColumn):Object

该函数返回一个包含用于表示样式设置的styleName:value对的完整对象,或者null。styleName为样式属性的名称,如Color,而value为样式属性的值,如0x00FF00。

AdvancedDataGrid会在更新显示时调用回调函数,如应用启动时该组件第一次会绘制的时候,或者在您调用invalidateList()来刷新组件所有行的显示时。

本节的示例将使用回调函数来定义AdvancedDataGrid的样式,本节中所有的示例都使用以下StyleData.as文件中的数据:
程序代码
[Bindable]
private var dpADG:ArrayCollection = new ArrayCollection([
   {Artist:'Pavement', Album:'Slanted and Enchanted', Price:12.99},
   {Artist:'Pavement', Album:'Brighten the Corners', Price:13.99},
   {Artist:'Saner', Album:'A Child Once', Price:14.99},
   {Artist:'Saner', Album:'Helium Wings', Price:12.99},
   {Artist:'The Doors', Album:'The Doors', Price:10.99},
   {Artist:'The Doors', Album:'Morrison Hotel', Price:12.99},
   {Artist:'Grateful Dead', Album:'American Beauty', Price:11.99},
   {Artist:'Grateful Dead', Album:'In the Dark', Price:17.99},
   {Artist:'Grateful Dead', Album:'Shakedown Street', Price:13.99},
   {Artist:'The Doors', Album:'Strange Days', Price:12.99},
   {Artist:'The Doors', Album:'The Best of the Doors', Price:10.99}
]);


定义行样式

以下示例使用AdvancedDataGrid.styleFunction属性指定一个回调函数来定义表格行样式。在该示例中,您可以使用Button控件来选择AdvancedDataGrid.styleFunction中的artist,然后回调函数将会红色高亮显示所有被选择的行。
程序代码
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
            // Include the data for the AdvancedDataGrid control.
            include "StyleData.as"
            // Artist name to highlight.
            protected var artistName:String;
            // Event handler to set the selected artist's name
            // based on the selected Button control.
            public function setArtistName(event:Event):void
            {
                artistName=Button(event.currentTarget).label;
                // Refresh row display.
                myADG.invalidateList();
            }
            // Callback function that hightlights in red
            // all rows for the selected artist.
            public function myStyleFunc(data:Object,
                col:AdvancedDataGridColumn):Object
            {
                if (data["Artist"] == artistName)
                return {color:0xFF0000};
                // Return null if the Artist name does not match.
                return null;
            }
        ]]>
    </mx:Script>
    <mx:AdvancedDataGrid id="myADG"
    width="100%" height="100%"
    dataProvider="{dpADG}"
    styleFunction="myStyleFunc">
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="Artist"/>
            <mx:AdvancedDataGridColumn dataField="Album"/>
            <mx:AdvancedDataGridColumn dataField="Price"/>
        </mx:columns>
    </mx:AdvancedDataGrid>
    <mx:HBox>
        <mx:Button label="Pavement" click="setArtistName(event);"/>
        <mx:Button label="Saner" click="setArtistName(event);"/>
        <mx:Button label="The Doors" click="setArtistName(event);"/>
    </mx:HBox>
</mx:Application>
运行实例

定义列样式

以下示例修改上节的示例来定义AdvancedDataGrid的行和列样式。在该示例中,所有价格小于$11.00的单元都将显示为绿色。
程序代码
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
            // Include the data for the AdvancedDataGrid control.
            include "StyleData.as"
            // Artist name to highlight.
            protected var artistName:String;
            // Event handler to set the selected artist's name
            // based on the selected Button control.
            public function setArtistName(event:Event):void
            {
                artistName=Button(event.currentTarget).label;
                // Refresh row display.
                myADG.invalidateList();
            }
            // Callback function that hightlights in red
            // all rows for the selected artist.
            public function myStyleFunc(data:Object,
                col:AdvancedDataGridColumn):Object
            {
                if (data["Artist"] == artistName)
                return {color:0xFF0000};
                // Return null if the Artist name does not match.
                return null;
            }
            // Callback function that hightlights in green
            // all entries in the Price column
            // with a value less than $11.00.
            public function myColStyleFunc(data:Object,
                col:AdvancedDataGridColumn):Object
            {
                if(data["Price"] <= 11.00)
                    return {color:0x00FF00};
                return null;
            }
        ]]>
    </mx:Script>
    <mx:AdvancedDataGrid id="myADG"
        width="100%" height="100%"
        dataProvider="{dpADG}"
        styleFunction="myStyleFunc">
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="Artist"/>
            <mx:AdvancedDataGridColumn dataField="Album"/>
            <mx:AdvancedDataGridColumn dataField="Price"
                styleFunction="myColStyleFunc"/>
        </mx:columns>
    </mx:AdvancedDataGrid>
    <mx:HBox>
        <mx:Button label="Pavement" click="setArtistName(event);"/>
        <mx:Button label="Saner" click="setArtistName(event);"/>
        <mx:Button label="The Doors" click="setArtistName(event);"/>
    </mx:HBox>
</mx:Application>
运行实例

在列中使用数据格式器(formatter)

AdvancedDataGridColumn 有一个formatter属性,通过它,您可以向列传递一个Formatter类,或者Formatter子类的实例。格式器类可以将数据转换为自定义的字符串。例如您可以使用CurrencyFormatter类在Price列值的加上美元符($)前缀。

格式器类可以和labelFunction属性或styleFunction属性设定的回调函数一起使用,如果您指定了一个回调函数,Flex在回调函数值返回后调用格式器类。

以下示例在修改自自定义行样式章节示例,在Price列增加了一个货币格式器以在价格前显示$前缀:
程序代码 程序代码
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.advancedDataGridClasses.AdvancedDataGridColumn;
            // Include the data for the AdvancedDataGrid control.
            include "StyleData.as"
            // Artist name to highlight.
            protected var artistName:String;
            // Event handler to set the selected artist's name
            // based on the selected Button control.
            public function setArtistName(event:Event):void
            {
                artistName=Button(event.currentTarget).label;
                // Refresh row display.
                myADG.invalidateList();
            }
            // Callback function that hightlights in red
            // all rows for the selected artist.
            public function myStyleFunc(data:Object,
                col:AdvancedDataGridColumn):Object
            {
                if (data["Artist"] == artistName)
                return {color:0xFF0000};
                // Return null if the Artist name does not match.
                return null;
            }
        ]]>
    </mx:Script>
    <mx:AdvancedDataGrid id="myADG"
        width="100%" height="100%"
        dataProvider="{dpADG}"
        styleFunction="myStyleFunc">
        <mx:columns>
            <mx:AdvancedDataGridColumn dataField="Artist"/>
            <mx:AdvancedDataGridColumn dataField="Album"/>
            <mx:AdvancedDataGridColumn  width="75" dataField="Price">
                <mx:formatter>
                    <mx:CurrencyFormatter/>
                </mx:formatter>
            </mx:AdvancedDataGridColumn>
        </mx:columns>
    </mx:AdvancedDataGrid>
    <mx:HBox>
        <mx:Button label="Pavement" click="setArtistName(event);"/>
        <mx:Button label="Saner" click="setArtistName(event);"/>
        <mx:Button label="The Doors" click="setArtistName(event);"/>
    </mx:HBox>
</mx:Application>
0
2
分享到:
评论

相关推荐

    Flex技术中AdvancedDataGrid使用方法

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

    Flex应用AdvancedDataGrid表头皮肤

    3. **样式和主题**:在Flex中,我们可以使用CSS来设置AdvancedDataGrid的样式,包括表头的颜色、字体、间距等。Flex还支持主题(Theme),通过预定义的一系列样式和皮肤,可以快速改变整个应用程序的外观。例如, ...

    flex-datagrid-advancedDataGrid-demo

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

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

    总结,这个“flex 使用AdvancedDataGrid组件的课件管理系统”示例项目,为开发者提供了一个很好的起点,展示了如何利用Flex和AdvancedDataGrid组件构建数据驱动的应用。通过研究和扩展这个项目,开发者可以掌握更...

    Flex 3 发现之旅

    3. **显示分层数据**:AdvancedDataGrid的第一列可以展示一个可折叠的导航树,控制表格行的展开和收起,这对于处理层级结构的数据非常有用。 4. **多列分组**:可以将多列数据归并到同一个表头下,形成分组,这样有...

    flex advancedDataGrid 中如何实现带checkbox的树

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

    AdvancedDataGrid综合应用

    在Adobe Flex中,AdvancedDataGrid是一个强大的组件,用于展示大量数据并进行复杂的数据显示和操作。这个组件超越了基本的DataGrid,提供了更丰富的功能,如分组、排序、过滤、多列排序、拖放以及自定义列渲染等。在...

    AdvancedDataGrid动态加载.rar

    2. **虚拟化**:Flex 3的AdvancedDataGrid支持数据虚拟化,意味着只有当前可视的数据行会被渲染,这样可以极大地提高性能,尤其是在处理数千甚至上万条记录时。 3. **dataProvider属性**:设置AdvancedDataGrid的...

    SparkTree_AdvancedDataGrid

    1. **数据模型**:AdvancedDataGrid使用了Flex的数据绑定机制,与数据提供器进行交互。数据提供器通常是ArrayCollection或HierarchicalData,它们负责将业务数据转换为网格可理解的格式。 2. **自定义列**:...

    FLEX AdvancedDataGrid 复选框

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

    flex AdvancedDataGrid实现checkBox全选功能

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

    flex DataGrid 表头分组

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

    DataGrid和AdvancedDataGrid CheckBox全选功能1.1

    在本文中,我们将深入探讨如何在Flex中实现DataGrid和AdvancedDataGrid组件的CheckBox全选功能。这个功能在数据展示和交互式操作中非常常见,它允许用户通过一个主CheckBox来选择或取消选择所有行数据。 首先,我们...

    flex 合并单元格

    在Flex中,我们通常使用MX组件库中的DataGrid或Spark组件库中的List和AdvancedDataGrid来展示数据。对于合并单元格的需求,AdvancedDataGrid是更合适的选择,因为它提供了更丰富的功能,包括单元格和列的合并。 1. ...

    Flex中DataGrid和其它控件使用

    在“AdvancedDataGrid的使用”文件中,我们可以学习如何设置高级网格的层次结构,以及如何利用其强大的功能来提升用户体验。 与DataGrid相关的控件协同使用主要包括以下几个方面: 1. **LabelField**:DataGrid中...

    flex css设计器

    4. **控件库支持**:Flex CSS设计器支持大部分Flex提供的内置控件,如按钮、面板、列表等,允许用户针对每个控件独立设置样式。 5. **代码生成**:完成设计后,工具会自动生成相应的CSS代码,可以直接复制到Flex...

    AdvancedDataGrid 对sdk3.5不支持,对3.2支持方案(合并单元格)

    总之,虽然Flex SDK 3.5不直接支持AdvancedDataGrid的单元格合并,但通过源码分析、自定义渲染器、扩展组件或者使用第三方库,开发者可以找到合适的解决方案来克服这一限制。在实际开发中,理解并掌握这些技术将有助...

    AdvancedDataGrid datavisualization.swc

    flex datavisualization.swc flex 3 AdvancedDataGrid

    AdvancedDataGrid 动态添加节点 控制树

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

Global site tag (gtag.js) - Google Analytics