`
lxs647
  • 浏览: 523164 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Flex4 自定义Datagrid的itemRenderer和headerRenderer【转】

 
阅读更多

先看图片:

 因为项目中需要用到datagrid,而且需要在其中嵌入dropdownlist,包括header和item。

一开始嵌入的是Combobox,但是发现用Combobox的话,稍微动一个datagrid,如改变大小等,Combobox里的数据立刻不见了,所以使用dropdownlist控件,反正是Flex4.1。

 废话完毕,上代码:

for datagrid:

代码
< mx:DataGrid id = " dgList "  width = " 100% "   height = " 100% "  dataTipFunction = " buildToolTip "
                         variableRowHeight
= " true "  sortableColumns = " false "  visible = " false " >
                
< mx:columns >     
                    
< mx:DataGridColumn headerText = " chkSave "  visible = " false " >
                        
< mx:itemRenderer >                             
                            
< fx:Component >
                                
< mx:CheckBox selected = " {data.chkSave} " />         
                            
</ fx:Component >
                        
</ mx:itemRenderer >
                    
</ mx:DataGridColumn >
                    
< mx:DataGridColumn headerText = " chkDel "  visible = " false " >
                        
< mx:itemRenderer >
                            
< fx:Component >
                                
< mx:CheckBox selected = " {data.chkDel} "   />         
                            
</ fx:Component >
                        
</ mx:itemRenderer >
                    
</ mx:DataGridColumn >
                    
< mx:DataGridColumn dataField = " Xbrl "  headerText = " XBRL "  itemRenderer = " cons.com.epro.child.myCombox "   />                     
                    
< mx:DataGridColumn headerText = " Column1 "  dataField = " Column1 "  width = " 200 "  showDataTips = " true " />             
                    
< mx:DataGridColumn headerText = " NOTE "  dataField = " NOTE "  width = " 50 "   />
                    
                    
< mx:DataGridColumn headerText = " Column2 "  dataField = " Column2 "  width = " 90 "  wordWrap = " true "   headerRenderer = " cons.com.epro.child.myComboxHeader "   />
                    
< mx:DataGridColumn headerText = " Column3 "  dataField = " Column3 "  width = " 90 "  wordWrap = " true "   headerRenderer = " cons.com.epro.child.myComboxHeader "   />
                    
< mx:DataGridColumn headerText = " Column4 "  dataField = " Column4 "  width = " 90 "  wordWrap = " true "   headerRenderer = " cons.com.epro.child.myComboxHeader " />
                    
< mx:DataGridColumn headerText = " Column5 "  dataField = " Column5 "  width = " 90 "  wordWrap = " true "   headerRenderer = " cons.com.epro.child.myComboxHeader " />
                    
< mx:DataGridColumn headerText = " Column6 "  dataField = " Column6 "  width = " 90 "  wordWrap = " true "   headerRenderer = " cons.com.epro.child.myComboxHeader " />
                    
< mx:DataGridColumn headerText = " Column7 "  dataField = " Column7 "  width = " 90 "  wordWrap = " true "   headerRenderer = " cons.com.epro.child.myComboxHeader " />
                    
< mx:DataGridColumn headerText = " Column8 "  dataField = " Column8 "  width = " 90 "  wordWrap = " true "   headerRenderer = " cons.com.epro.child.myComboxHeader " />  
                    
< mx:DataGridColumn headerText = " Column9 "  dataField = " Column9 "  width = " 90 "  wordWrap = " true "   headerRenderer = " cons.com.epro.child.myComboxHeader " />
                    
                
</ mx:columns >
            
</ mx:DataGrid >

for myCombox:

代码
<? xml version = " 1.0 "  encoding = " utf-8 " ?>
< s:MXDataGridItemRenderer xmlns:fx = " http://ns.adobe.com/mxml/2009 "  
                          xmlns:s
= " library://ns.adobe.com/flex/spark "  
                          xmlns:mx
= " library://ns.adobe.com/flex/mx "      
                          creationComplete
= " cc() "
                          focusEnabled
= " true " >
    
< fx:Script >
        
<! [CDATA[
            import flash.events.Event;
            
            import mx.collections.
* ;
            import mx.controls.Alert;
            import mx.controls.DataGrid;
            import mx.events.FlexEvent;
            import mx.events.IndexChangedEvent;
            import mx.events.ListEvent;
            import mx.events.ScrollEvent;
            
            import spark.events.IndexChangeEvent;

            
private  function cc(): void {
                
if (owner  is  DataGrid)
                    DataGrid(owner).addEventListener(
" scroll " , dXbrl_creationCompleteHandler);
            }
            
override   public  function  set  data(value:Object): void
            {
                
if (value  !=   null )
                {
                    super.data 
=  value;
                    
                    
                }   
            }            
            

            
protected  function dXbrl_creationCompleteHandler( event :ScrollEvent): void
            {
                var arr:ArrayCollection 
=  dXbrl.dataProvider  as  ArrayCollection;
                var isEquity:Boolean
= false ;
                
if (data.IsEquity)
                    isEquity
= true ;
                var i:
int = 0 ;
                
                
for (i = 0 ;i < arr.length;i ++ )
                {
                    
if (isEquity)
                    {
                        
if (arr[i].line_item == data.XbrlSelected)
                        {
                            dXbrl.selectedIndex
= i;
                            
break ;
                        }
                    }
                    
else {                        
                    
                        
if (arr[i].pdf_item == data.XbrlSelected)
                        {
                            dXbrl.selectedIndex
= i;
                            
break ;
                        }
                    }
                }
                dXbrl_changeHandler();
                
// data.dispatchEvent(event);
                
// dXbrl.selectedIndex=dXbrl.dataProvider.getItemIndex(data.XbrlSelected);
            }
            
            
protected  function dXbrl_changeHandler(): void
            {                
                data.XbrlSelected
= dXbrl.selectedItem.pdf_item;
                data.XbrlSelectedText
= dXbrl.selectedItem.pdf_item;
                data.XbrlSelectedValue
= dXbrl.selectedItem.line_item;
                
            }

        ]]
>
    
</ fx:Script >
    
    
< s:DropDownList id = " dXbrl "  labelField = " pdf_item "  dataProvider = " {data.Xbrl as ArrayCollection} "  width = " 100% "
                    creationComplete
= " dXbrl_creationCompleteHandler(null) "  change = " dXbrl_changeHandler() "
                    toolTip
= " {dXbrl.selectedItem.pdf_item} "    />
    
    
</ s:MXDataGridItemRenderer >

for myComboxHeader:

代码
<? xml version = " 1.0 "  encoding = " utf-8 " ?>
< s:MXDataGridItemRenderer xmlns:fx = " http://ns.adobe.com/mxml/2009 "  
                          xmlns:s
= " library://ns.adobe.com/flex/spark "  
                          xmlns:mx
= " library://ns.adobe.com/flex/mx "  
                          focusEnabled
= " true "  creationComplete = " cc() " >
    
< fx:Script >
        
<! [CDATA[
            import mx.collections.
* ;
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.controls.DataGrid;
            import mx.controls.dataGridClasses.DataGridColumn;
            import mx.controls.dataGridClasses.DataGridHeader;
            import mx.events.FlexEvent;
            
            import spark.events.IndexChangeEvent;
            [Bindable]
            
private  var headItems:ArrayCollection = new  ArrayCollection([
                {label:
" company " ,data: 1 },
                {label:
" group " ,data: 2 }
                ]);
            
private  var col:DataGridColumn = null ;
            
override   public  function  set  data(value:Object): void
            {                
                
if (value  !=   null )
                {
                    col 
=  (value  as  DataGridColumn);
                    super.data 
=  value;    
                }                
            }
            
override   public  function  get  data():Object{
                
return  headItems;
            }
            
protected  function cc(): void {                
                var dg:DataGrid 
= this .parent.parent  as  DataGrid;
                
if (col != null )
                    col.headerText
= dHeader.selectedItem.label;
            }
            
        ]]
>
    
</ fx:Script >
    
< s:layout >         
        
< s:VerticalLayout />
    
</ s:layout >     
    
    
< s:DropDownList id = " dHeader "  labelField = " label "  selectedIndex = " 0 "  width = " 80 "  dataProvider = " {headItems} "
                         change
= " cc() "   />     
</ s:MXDataGridItemRenderer >

其 中,itemRenderer不是问题,难点在HeaderRender上面,因为需要获取header上的ddl选择的值,而flex的 datagrid大家知道,他是不能像c#那样findControl的,所以我用了一个全局变量private var col:DataGridColumn=null;来存储当前是哪一列,然后将ddl的值绑定到该列的headerText上.

分享到:
评论

相关推荐

    DataGrid的itemRenderer and HeaderRenderer

    在本话题中,我们将深入探讨如何使用`checkbox`和`combobox`作为`DataGrid`的`itemRenderer`和`headerRenderer`,以及实现全选、多选等功能。 首先,`itemRenderer`是`DataGrid`中用于自定义每一行数据项显示方式的...

    Flex 自定义Datagrid的ItemRender

    本文将深入探讨如何在Flex中自定义Datagrid的ItemRender,以实现按钮、单选、复选和日期等控件的集成。 首先,我们需要了解ItemRender的基本概念。ItemRenderer是Flex提供的一种机制,允许开发者为数据网格中的每一...

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

    将自定义的ColumnHeader组件添加到DataGrid的`headerRenderer`属性中。这样,每当我们创建一个带有这个自定义列头的新列,都会显示带有ComboBox的过滤选项。 6. 用户体验优化: 为了提高用户体验,可以考虑添加...

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

    在DataGrid中,我们可以通过设置`itemRenderer`属性来指定特定列使用我们的自定义渲染器。例如: ```xml 数据列" dataField="yourDataField" itemRenderer="utils.MyCustomLabelRenderer"/&gt; ``` 这里的`utils....

    Flex itemRenderer的详细教程

    在 Flex 开发中,ItemRenderer 是一种非常强大的工具,它允许开发者自定义列表(List)、数据网格(DataGrid)等控件中每一项的外观和行为。通过 ItemRenderer,我们可以实现更加灵活和动态的界面设计。 #### 二、...

    使用DataGrid中扩展ItemRenderer和HeaderRenderer进行操作

    这涉及到对ItemRenderer和HeaderRenderer的自定义。 ItemRenderer是DataGrid中用于每个单元格显示的组件,它负责将数据模型转换为可视化的元素。为了创建自定义的ItemRenderer,你需要创建一个类并实现两个关键接口...

    自定义Datagrid

    本资源围绕C#语言环境下的自定义Datagrid展开,旨在帮助开发者实现更为灵活和功能丰富的数据展示。 首先,"合并列显示多个字段"是指在单个单元格中展示多个数据字段的信息。这种功能在处理复杂数据模型时特别有用,...

    flex4做的itemrenderer呈现器

    在Flex4中,ItemRenderer是一种强大的工具,用于自定义数据Grid、List或其他数据绑定组件中的项显示方式。本文将深入探讨如何使用Flex4...但这个例子已经足够说明了如何使用Flex4来创建和使用自定义的ItemRenderer。

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

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

    flex自定义datagrid

    通过自定义ItemRenderer和集成PagingProvider,我们可以极大地增强DataGrid的用户体验,使其更加符合业务需求。在实际开发过程中,不断调试和优化这些自定义组件,将有助于提升应用的整体性能和易用性。

    Flex4之DataGrid四个的示例【客户端和服务器端】

    总结起来,"Flex4之DataGrid四个的示例【客户端和服务器端】"这一主题涵盖了使用Flex4的DataGrid组件展示和处理数据的基本技巧,包括客户端数据绑定、服务器端交互以及JSON数据的使用。通过具体的示例,开发者可以...

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

    在Flex4中,动态生成DataGrid以及应用客户化itemRenderer是一项关键技能,它允许开发者根据运行时的数据结构灵活地创建用户界面。以下是对这个主题的详细解释: 首先,`DataGrid`组件是Flex中用于展示表格数据的...

    flex as actionscript datagrid 背景色 flash itemRenderer script iframe overrider 跳转到别的页面

    在标题和描述中提到的知识点主要涉及Flex DataGrid的自定义渲染、背景色设置、跳转到其他页面以及与Flash的集成。以下是对这些知识点的详细解释: 1. **Flex DataGrid**: Flex DataGrid是一种控件,用于显示和编辑...

    FLEX的datagrid合计、平均值

    在Flex开发中,Datagrid组件是用于展示数据集的一个强大工具,它允许用户以表格的形式查看和操作数据。本文将深入探讨如何在Flex的Datagrid中实现数据的合计与平均值计算,帮助开发者更好地理解和应用这些功能。 ...

    Flex dataGrid 自定义显示列

    本篇文章将深入探讨Flex中的数据Grid组件以及如何自定义显示列,这对于提升用户体验和增强数据展示功能至关重要。 Flex DataGrid是MXML组件库中的一个控件,它允许开发者以网格形式展示数据集合。这种组件特别适用...

    silverlight自定义DataGrid demo

    在构建自定义DataGrid时,开发者需要手动设置Grid的行和列,并在每个单元格中放置相应的数据显示或编辑控件。这可能包括TextBlock用于显示文本,TextBox用于输入,以及按钮和其他交互元素。 描述中提到这个demo是...

    Flex动态创建DataGrid设置图片

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

Global site tag (gtag.js) - Google Analytics