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

 Flex 3 安装后,开始体验,所以由今天开始,我们将陆续和大家一起来学习其中的新特性,在feiyblog看到例子 马上和大家分享一下:
今天我们要说的是官方文档中用了整章介绍的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>
运行实例
使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值