`

Flex3 自定义ClassFactory,让DataGrid动态改变Button或Image等属性

阅读更多
在Flex的DataGrid中显示按钮Button或者图片Image等,有时会需要Button的标签label,icon是动态改变的,DataGrid也是由Actionscript根据数据库中数据动态生成。这时我们需要自定义ClassFactory来实现这些特性。
package com.yonghong.model
{
import mx.core.ClassFactory;

public class MyClassFactory extends ClassFactory
{
                  //styleCollection represents a collection of style
                  //properties represents a collection of property
private var styleCollection:Object;
public function CMSClassFactory(generator:Class=null,properties:Object=null,styleCollection:Object=null)
{
super(generator);
this.properties=properties;
this.styleCollection=styleCollection;

}

public override  function newInstance():*
    {
        var instance:Object = new generator();

        if (properties != null)
        {
            for (var p:String in properties)
            {
                instance[p] = properties[p];
            }
        }
        if(styleCollection != null){
        for(var s:String in styleCollection){
        instance.setStyle(s,styleCollection[s]);
        }
        }

        return instance;
    }



}
}

以上properties是父类ClassFactory的一个属性。至于动态创建DataGrid,我这里只列出关键代码如下:
//*****************************************
var aColumnDef:ArrayCollection = event.result as ArrayCollection;                 
    var oColumnDef:Object;
    var dg:DataGrid = new DataGrid;
    var dgc:DataGridColumn=new DataGridColumn();
    var aColumnsNew:Array = dg.columns

      
    for (var i:int=0;i<event.result.length;i++)  {                
      oColumnDef = event.result[i];
      dgc = new DataGridColumn();      
      dgc.dataField = oColumnDef.id.datafield;         
     
      //MyButton 是自定义组件,在其中添加了一些事件
      var cf:ClassFactory=new MyClassFactory(MyButton,{label:"ok"},{icon:add});         
      dgc.itemRenderer=cf;                      
      }    
      aColumnsNew.push(dgc)                                      
    }
  
    dg.columns = aColumnsNew;                                     

    dg.editable = true;


    dg.dataProvider = ds;       

//以下是MyButton的定义
package
{
import flash.events.Event;
import flash.events.MouseEvent;
import mx.controls.Alert;
import mx.controls.Button;
public class MyButton extends Button
{

private var currentData:Object;
public function  MyButton()
{
super();
this.addEventListener(MouseEvent.CLICK ,clickHandle)
}

override public function set data(value:Object):void{
this.currentData = value; //保存整行的引用
}

            private function clickHandle(e:Event):void{

//test 是 DataGrid中的一列
Alert.show("xx"+currentData.test);
}                
}

}

希望能帮到一些朋友
分享到:
评论
2 楼 baixiaozhe 2011-04-19  
不错  学习了
1 楼 sunique 2010-01-18  
谢谢,正好用到。

相关推荐

    Flex 自定义Datagrid的ItemRender

    在自定义的ItemRenderer类中,可以添加各种Flex组件,如Button、RadioButton、CheckBox和DateField等。例如,要添加一个日期显示字段,可以这样做: ```actionscript private var dateField:DateField = new ...

    Flex中如何创建自定义排序DataGrid控件的例子

    本教程将详细讲解如何在Flex中创建一个自定义排序的DataGrid控件。 首先,我们需要了解Flex DataGrid的基本结构。DataGrid控件通常与一个数据提供者关联,这个提供者可以是ArrayCollection、XMLListCollection或...

    flex 自定义 datagrid 列头带组合框进行过滤

    对于DataGrid的列头,我们通常需要继承`mx.controls.DataGridColumnHeader`类,并在其上覆盖或扩展相关方法和属性,以实现自定义的功能。比如,我们可以添加一个ComboBox控件并处理其事件,以便在用户选择特定值时对...

    flex 自定义dataGrid渲染器.根据数据变色

    自定义渲染器是Flex组件定制的一部分,它可以让我们对UI元素的显示方式有更大的控制力。在这个场景中,我们创建了一个针对DataGrid的自定义Label渲染器,这个渲染器能够根据数据显示不同的颜色,以突出关键信息或者...

    给DataGrid自定义Header功能

    - 在你的DataGrid配置对象中,为需要自定义的列设置`headerRenderer`属性,传入你之前创建的组件。 - 确保DataGrid能够识别并正确调用这个自定义渲染器。这通常涉及到在列定义对象中引入和引用你的组件。 3. **...

    Flex dataGrid 自定义显示列

    总的来说,Flex DataGrid的自定义显示列是通过灵活的列配置、自定义渲染器以及数据绑定来实现的。开发者可以根据业务需求,通过调整这些参数来创建高度定制化的数据展示界面,提高应用的用户体验。对于深入学习Flex...

    DataGrid自定义列标题

    综上所述,通过各种方式我们可以实现DataGrid的自定义列标题,包括文本、样式、交互性和动态调整列宽等特性,以满足不同场景下的需求。在实际项目中,根据具体业务逻辑和界面设计灵活运用这些方法,能够打造出更加...

    Flex动态创建DataGrid设置图片

    在Flex开发中,DataGrid控件是用于展示数据集的常用组件,它可以显示多行多列的数据,并且具有丰富的自定义功能。本教程主要聚焦于如何在Flex中动态创建DataGrid,并向其中添加图片,这在创建交互式、富媒体应用时...

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

    在Flex4中,`DataGrid`的列可以通过动态创建来适应变化的数据结构,这在处理不确定列数或列类型的应用场景中非常有用。 在描述中提到,数据可能是数组类型,列名和列个数都是动态的。这意味着在运行时,我们需要...

    flex DataGrid改变指定行的背景颜色

    在某些情况下,我们可能需要根据特定条件改变DataGrid中的某一行或几行的背景颜色,以突出显示或者区分不同的数据状态。本篇文章将详细探讨如何在Flex中实现这一功能。 首先,我们需要理解DataGrid的基本结构。...

    Flex 自定义DataGrid,带增删改查等各种功能

    Flex 自定义DataGrid,带增删改查等各种功能.列锁定,序号等各种功能.

    WPF中的DataGrid、Button、ComboBox等样式+DataGrid分页控件

    在标题提到的“WPF中的DataGrid、Button、ComboBox等样式+DataGrid分页控件”中,我们将深入探讨这些关键组件以及如何自定义它们的样式和实现分页功能。 首先,DataGrid是WPF中用于展示和编辑表格数据的强大控件。...

    flex DataGrid 表头分组

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

    flex 三状态多选 自动分页DataGrid

    - Flex中的DataGrid默认只支持单选或全选,但通过自定义实现,可以扩展到三状态多选。这通常涉及到监听`itemClick`事件,维护一个记录选中状态的数组,并更新ItemRenderer的视觉反馈。 - 用户可以通过复选框或者...

    DataGrid模板列自定义控件

    依赖属性是WPF中数据绑定的基础,它提供了属性值的改变通知和值验证等功能。在自定义控件中,我们常常需要定义依赖属性以便与外部数据源进行绑定。定义依赖属性的步骤如下: 1. 使用DependencyProperty.Register方法...

    flex动态生成datagrid表头

    而动态生成DataGrid表头则是在运行时根据数据源来创建列,这在处理未知数量或类型的列时非常有用。这个主题涉及到ActionScript编程和Flex布局理解。 动态生成DataGrid表头的基本步骤如下: 1. **创建DataGrid对象*...

    Flex DataGrid 改变某一行的背景颜色

    总结,改变Flex DataGrid中某一行的背景颜色通常涉及自定义ItemRenderer、使用CSS样式或者监听事件。选择哪种方法取决于具体需求,如是否需要复杂逻辑、性能要求以及代码可维护性等因素。通过这些技术,我们可以使...

    Flex自定义右键菜单

    - Flex允许自定义主题以改变菜单的外观。可以使用CSS或者修改默认的Spark或 Halo主题来实现。 - 示例代码: ```css /* 在皮肤CSS文件中 */ .myRightClickMenu { color: #0000FF; background-color: #FFFFFF; ...

    flex 中datagrid 动态攺变行颜色

    通过自定义ItemRenderer并结合数据源的动态属性,我们可以灵活地控制Datagrid的视觉表现,使得应用更具吸引力和交互性。记得在实际项目中根据具体需求进行调整和优化,以保证最佳的性能和用户体验。

Global site tag (gtag.js) - Google Analytics