`
yexin218
  • 浏览: 970787 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Flex-设置DataGrid被选择行的风格

    博客分类:
  • Flex
阅读更多

这里例子将展示如何使用用户自定义的item renderer来设置DataGrid中行被选择的风格。看看这个例子:

我们先搭建一个基本的界面结构:一个只有几个列的DataGrid。

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
   layout="absolute" width="300" height="125">
  <mx:DataGrid width="100%" height="100%">
    <mx:columns>
      <mx:DataGridColumn headerText="First Name" dataField="firstName"/>
      <mx:DataGridColumn headerText="Last Name" dataField="lastName"/>
      <mx:DataGridColumn headerText="Age" dataField="age"/>
      <mx:DataGridColumn headerText="Sex" dataField="sex"/>
    </mx:columns>
  </mx:DataGrid>
</mx:Application>

 然后,还要导入一些初始的数据到DataGrid中。这里是在在程序加载初始化的时候即creationComplete函数执行的时候调用我们导入数据的函数init()。

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
   width="300" height="125" creationComplete="init()">

方法中增加了一些变量,这些变量对应grid中的datafield。具体如下:

<mx:Script>
<![CDATA[
 import mx.collections.ArrayCollection;
 
 [Bindable]
 private var peeps:ArrayCollection;

 private function init():void
 {
   peeps = new ArrayCollection();
   peeps.addItem({firstName: "Handsome", lastName: "Dude", age: 24, sex: "male"});
   peeps.addItem({firstName: "Red", lastName: "Bloke", age: 25, sex: "male"});
   peeps.addItem({firstName: "Tall", lastName: "Guy", age: 25, sex: "male"});
   peeps.addItem({firstName: "Cute", lastName: "Girl", age: 24, sex: "female"});
   peeps.addItem({firstName: "Hot", lastName: "Chick", age: 24, sex: "female"});
   peeps.addItem({firstName: "Lazy", lastName: "Man", age: 25, sex: "male"});
 }
]]>
</mx:Script>

 要使得这些数据现实在grid中,我们必须设定DataGrid中的dataProvider属性指向这个数据源:

<mx:DataGrid dataProvider="{peeps}" width="100%" height="100%">

 最有意思的部分在于当我们选择了某个行的时候要创建一个自定义的itemRender.这里例子当中我们要创建的自定义组件是一个Label。要使得这个Label可用,我们必须重写Label的set data函数。把Label的text内容设置成为某个dataField的属性值。从我们的renderer的listData属性中取得dataField属性名。自定义的Renderer为:

<?xml version="1.0" encoding="utf-8"?>
<mx:Label xmlns:mx="http://www.adobe.com/2006/mxml"
   width="100%" height="100%">
  <mx:Script>
   <![CDATA[
     import mx.controls.dataGridClasses.DataGridListData;
     
     override public function set data(value:Object):void
     {
       super.data = value;
       
       if(value)
       {
         var dglistData:DataGridListData = listData as DataGridListData;
         if(value[dglistData.dataField])
           this.text = value[dglistData.dataField];
       }
     }
   ]]>
 </mx:Script>
</mx:Label>

 这里我们所做的只是创建一个很贱的item Renderer。要弄清这个Renderer是否是我们所选的行,我们必须检查这个Renderer的Data是否对应DataGrid中被选中行的数据。为此,我们又在init中设置了对DataGrid事件的监听。下面是全部的CustomRenderer.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Label xmlns:mx="http://www.adobe.com/2006/mxml"
   width="100%" height="100%" creationComplete="init()">
  <mx:Script>
   <![CDATA[
     import mx.events.ListEvent;
     import mx.controls.DataGrid;
     import mx.controls.dataGridClasses.DataGridListData;
     
     private var dg:DataGrid;
     
     private function init():void
     {
       dg = listData.owner as DataGrid;
       dg.addEventListener(ListEvent.CHANGE, updateSelected);
     }
     
     override public function set data(value:Object):void
     {
       super.data = value;
       
       if(value)
       {
         var dglistData:DataGridListData = listData as DataGridListData;
         if(value[dglistData.dataField])
           this.text = value[dglistData.dataField];
         updateSelected();
       }
     }
     
     private function updateSelected(e:Event = null):void
     {
       if(!data || !dg)
         return;
       
       if(dg.selectedItem == data)
       {
         //This row is selected update stuff
         setStyle("fontWeight", "bold");
       }
       else
       {
         //This row is not selected reset stuff
         setStyle("fontWeight", "normal");
       }
     }
   ]]>
 </mx:Script>
</mx:Label>

 首先,我为DataGrid增加了一个变量dg,在inti函数中,我们使用了之前提过的listData设置了gird变量等于这个renderer的owner.然后我们添加了一个事件,能够响应选择事件并且调用了updateSelected函数。这个函数检查这一行,并且更新了显示的风格。当然,当另外一行被选择之后,当前的选择行的风格必须也随着改变,即恢复初始的状态。

 

代码下载:http://www.switchonthecode.com/sites/default/files/244/source/SOTC-DataGridSelectedRow.zip

Original Paper:http://www.switchonthecode.com/tutorials/flex-datagrid-selected-row-styling

 

分享到:
评论
1 楼 linkagebest 2012-04-17  

相关推荐

    flex下拉dataGrid

    在Flex开发中,"flex下拉dataGrid"是一种常见的用户界面组件组合,它结合了下拉菜单(Dropdown)和数据网格(DataGrid)的功能,用于提供丰富的数据选择体验。这样的设计通常用于当用户需要从一个较大的数据集合中...

    flex-demo(读取xml文件)

    3. **运行main.mxml**:在MyEclipse中,用户可以直接右键点击`bin-debug/main.mxml`文件并选择运行,以启动Flex应用程序。`main.mxml`通常是Flex应用的主入口点,它定义了应用的结构和外观,可能包含控件、布局、...

    flex 的datagrid分页

    在Flex中,DataGrid组件是一个非常重要的数据展示控件,常用于显示大量的结构化数据,并支持排序、选择和编辑等功能。在能源监测软件的界面设计中,DataGrid组件往往用于呈现各种能源指标,如能耗、产量等,以便用户...

    FLEX教程-FLEX教程

    - **DataGrid**: Flex 中用于展示数据表格的组件。 - **功能**: - 动态加载数据。 - 排序、筛选等功能。 - 数据编辑支持。 #### 20. Flex 和 Java 通信 - **BlazeDS**: 一种用于 Flex 和 Java 服务器之间通信的...

    flex DataGrid翻页

    在Flex开发中,DataGrid是常用的组件之一,用于展示数据表格。当数据量较大时,为了提高用户体验,通常会引入翻页功能。本篇将详细探讨如何在Flex中的DataGrid实现翻页功能。 首先,我们需要了解Flex DataGrid的...

    Flex入门文档 -王一松

    - **表格数据显示**:DataGrid是Flex中用于展示表格数据的常用组件。这部分内容会详细介绍如何使用DataGrid来展示数据,并对其进行排序、筛选等功能的实现。 #### 14. Flex与后端通信 - **BlazeDS简介**:BlazeDS...

    DataGrid控件

    2. **列配置**:定义DataGrid的列,可以设置列的宽度、标题、数据类型等属性,还可以为不同列设置自定义模板。 3. **事件处理**:监听用户在DataGrid上的交互,如点击、排序、选择等,通过添加事件监听器来响应这些...

    Flex应用AdvancedDataGrid表头皮肤

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

    Flex开发实例.pdf

    - Flex支持使用CSS来定制界面样式,使得界面风格更加统一和美观。 #### 20. **数据验证** - Flex提供了丰富的数据验证机制,确保用户输入的数据符合预期。 #### 21. **打印** - Flex应用可以支持打印功能,允许...

    30多个 flex3 源码(整理)

    4. **日期选择器效果**:Flex中的`mx.controls.DateChooser`组件可以创建日期选择器,用户可以设置其外观和交互效果,例如弹出日历的动画效果,或者选择日期时的视觉反馈。 5. **引用Swf的Btn按钮**:在Flex中,...

    flex4实现的简单相册实例

    Flex4是一种基于ActionScript 3.0的开源框架,用于构建富互联网应用程序(RIA)。它提供了强大的图形渲染、组件库和数据绑定功能,使得开发者能够创建具有高度交互性和视觉吸引力的Web应用。在这个"flex4实现的简单...

    flex4 权威教程 中文版 入门

    ### Flex4权威教程中文版入门知识点详解 #### 一、Flex4简介与环境搭建 - **Flex4概述**:Flex4是一种开源框架,用于构建跨平台的桌面应用程序和Web应用程序。它提供了强大的用户界面(UI)组件库以及高级数据可视...

    flex相册展示源码

    在本项目中,开发者为了摆脱传统基于Flash的时间轴控制方式,选择使用Flex来构建一个更灵活、更现代的动态相册。 Flex框架的核心是Flex Builder(现更名为Flash Builder),这是一个集成开发环境(IDE),提供了...

    flex 仿google日历 源码3合一

    在Flex中实现这些功能,我们可以利用其内置的组件,如DataGrid展示事件,使用DateChooser选择日期,以及通过HTTPService与服务器进行数据交互。同时,Flex的皮肤和主题机制让我们能够自定义界面,使其接近Google日历...

    Flex AS3笔记

    - **ActionScript 3 (AS3)**: 是一种面向对象的脚本语言,被广泛应用于Flex和Flash平台,用于编写交互式内容、应用程序和服务。AS3提供强大的性能和灵活性,支持高级数据处理、网络通信等功能。 #### 2. Flex组件...

    Apress.FriendsofED.AdvancED.Flex.Application.Development.Aug.2008.pdf

    - **组件库**:熟悉Flex标准组件库,包括Button、TextArea、DataGrid等常用控件。 #### 2.2 用户界面设计与优化 - **布局管理**:学习Flex布局管理器,如HorizontalLayout、VerticalLayout等,实现自适应布局。 - ...

Global site tag (gtag.js) - Google Analytics