`

Flex DataGrid 内联 itemRenderer

    博客分类:
  • FLEX
阅读更多
dp.itemUpdated(event.data,"quantity");//更新dataprovider特点域值的方法

我从别人那里听到过一些问题,他们将按钮或者其他的交互式组件放到DataGrid的一个单元格中并且想知道如何通过按钮来改变DataGrid。一个常见的使用就是删除本行记录。这里介绍了一种方法,在一个简单的订单列表中,点击"add to cart"链接会减少库存中货物的数量。当数量减少到0的时候该链接就会被禁用而且其标签更改为“out of stock”。
让我们从声明 DataGrid开始。你将会看到一个内联的itemRenderer,对于此问题来说这是一个优雅的解决方案。你也可以使用一个代码相同的自定义组件作为itemRenderer。

程序代码 程序代码

<mx:DataGrid id="grid" dataProvider="{dp}" selectable="false" y="45" horizontalCenter="0"
                     width="390" height="169">
     <mx:columns>
           <mx:DataGridColumn headerText="Product" dataField="product"/>
           <mx:DataGridColumn headerText="Quantity" dataField="quantity"/>
           <mx:DataGridColumn headerText="Order" dataField="action" >
                  <mx:itemRenderer>
                        <mx:Component>
                                  <mx:LinkButton label="{data.action}"
                                                          enabled="{data.quantity > 0}"
                                                          click="sendEvent()">
                                        <mx:Script>
                                        <![CDATA[
                                                private function sendEvent() : void
                                               {
                                                      dispatchEvent( new CustomEvent(data) );
                                                }
                                        ]]>
                                       </mx:Script>
                                </mx:LinkButton>
                        </mx:Component>
                  </mx:itemRenderer>
           </mx:DataGridColumn>
      </mx:columns>
</mx:DataGrid>

效果如图:

最后一列的itemRenderer是一个LinkButton。LinkButton的label是相应记录中"action"域的值。只有"quantity"域的值大于0的时候LinkButton才是激活的。当点击LinkButton的时候,会调用脚本代码中的sendEvent()方法。
注意:此处的itemRenderer是一个LinkButton,但是你也可以使用一个容器,比如一个 Canvas,然后将LinkButton和其他与你的数据相关的组件放进去。
处理的点击事件方法sendEvent会分派一个 ChartEvent(一个自定义事件)。ChartEvent只针对本行的数据记录。
注意:如果你对itemRenderer很陌生,请记住多数Flex组件,包括用来作为itemRenderer的组件都有一个data属性。这个属性是由dataProvider中与itemRenderer 所在行相应的记录所设定的。
下面是CartEvent类的代码:

程序代码 程序代码

public class CartEvent extends Event
{
      static public const ADD_TO_CART:String = "addToChart";
      public function CartEvent(data:Object, bubbles:Boolean=true, cancelable:Boolean=false)
      {
           super(ADD_TO_CART, bubbles, cancelable);
           this.data = data;
      }
      public var data:Object;
}

这里没有多少需要说明的。事件类型是"addToCart"。这不是DataGrid分派的事件,那么你将如何监听并使用这个事件呢?问题的关键在于事件的bubbles属性的值:它默认在CartEvent构造函数中被设定为true。
由于DataGrid并不正式地支持"addToCart",所以你不能将它作为一个属性放到<mx:DataGrid>标签中。但是你可以在ActionScript中为它设定一个事件处理器:

程序代码 程序代码

grid.addEventListener(CartEvent.ADD_TO_CART, customHandler);

使用customHander()函数:

程序代码 程序代码

private function customHandler( event:CartEvent ) : void
{
      // the data record is included in the event; it can be modified and
      // put back into the dataProvider where it will be picked up by the
      // DataGrid
      event.data.quantity -= 1;
      dp.itemUpdated(event.data,"quantity");//更新dataprovider特点域值的方法
      if( event.data.quantity <= 0 ) {
           event.data.action = "out of stock";
           dp.itemUpdated(event.data,"action");
      }
}

当某一行中的LinkButton被点击的时候,将会分派一个CartEvent,该事件将由customHandler()函数处理。这个函数将更改对应数据记录的"quantity"的值然后dataProvider就被更新了。当"quantity"的值变成0的时候,"action"域中的文本将会更改为"out of stock",同时dataProvider也将被更新。
一直点击Sprockets产品(看下图)的"add to cart"的链接直到它的数量减为0。然后LinkButton的标签就会变成"out of stock"并且被禁用。

注意当数据更新的时候属性的名字也传给了itemUpdated()方法,这样做可以保证只有那个域被更新了。如果 dataProvider有排序操作的话,该域不是排序的一部分,更新它不会引发dataProvider自动排序。
这个例子可以有很多变型。例如,CartEvent可以传递行的索引而不是数据本身,然后customHandler就可以使用该索引从dataProvider中提取数据。在某些情况下索引可能比数据本身更有价值,或者你也可以同时使用这两个。
那么itemClick呢?
现在你可能会想:只通过itemClick就达到上述的目的阿,为何还好那样做?。没错,使用itemClick你可以知道哪一行的哪个域被点击了。然后你就可以更新数据,DataGrid中的显示也会自动更新。
但是这种方法的优势是:你有一个可交互的单元格——在本例中是一个LinkButton,但是它可以很复杂。当你需要一个自定义的itemRenderer的时候不妨考虑一下这种方法。

转自:http://blog.chinaunix.net/u1/55983/showart_909256.html
分享到:
评论

相关推荐

    Flex内联itemRenderer

    Flex内联itemRenderer是Adobe Flex框架中的一种技术,用于自定义列表或数据网格组件中项的显示方式。在Flex开发中,我们经常会遇到需要个性化显示数据的情况,比如在一个列表中,我们希望每条数据不仅仅是一个简单的...

    Flex itemRenderer的详细教程

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

    flex datagrid 前台 分页

    Flex DataGrid是一款强大的数据展示组件,常用于Adobe Flex或Flash Builder等开发环境中。它能够高效地展示大量数据,并提供丰富的用户交互功能。在本场景中,我们关注的是“前台分页”这一技术。 前台分页是指在...

    Flex Datagrid checkbox实现

    Flex Datagrid 是Adobe Flex框架中用于展示数据集的组件,它允许开发者以表格形式展示数据,并提供多种交互功能。在Flex应用中,Datagrid经常被用于处理和展示大量的结构化数据。在标题“Flex Datagrid checkbox实现...

    flex DataGrid 表头分组

    在Flex开发中,数据网格(DataGrid)是用于展示大量结构化数据的常用组件。它允许用户以表格的形式查看和操作数据。当我们处理的数据需要进行分类或者分组时,Flex DataGrid 提供了表头分组的功能,这使得数据的展示...

    flex datagrid 嵌套checkbox实现全选

    - 其次,为全选复选框添加事件监听器,比如`change`事件,当其状态改变时,遍历DataGrid的所有记录,通过`itemrenderer`中的复选框设置选中状态。 - 数据绑定可能涉及使用`selected`属性来同步复选框和数据模型的...

    Flex dataGrid 全选、反选

    在Flex编程中,DataGrid组件是用于展示结构化数据的强大工具。它允许用户对数据进行排序、筛选和编辑。在实际应用中,我们经常需要实现全选和反选功能,以便用户可以一次性选择或取消选择所有条目。本文将详细讨论...

    Flex DataGrid CheckBox 一个简单的全选

    这需要对DataGrid的itemRenderer进行自定义,以便在其中添加全选逻辑。 五、快速获取选中的值 为了获取选中行的数据,我们需要监听DataGrid的change事件,然后遍历DataGrid的selectedItems属性,这个属性会返回一个...

    理解_Flex_itemRenderer.pdf

    在本文中,将首先介绍内联itemRenderer的概念和使用方法,然后探讨itemRenderer的设计目的和Flex框架中的重用机制。接着,会通过示例代码来展示如何创建和使用itemRenderer,以及如何根据数据动态地更改itemRenderer...

    DataGrid的itemRenderer and HeaderRenderer

    在Flex和Adobe AIR开发中,`DataGrid`控件是一种常用的数据展示组件,它能够以表格形式展示数据集合。在本话题中,我们将深入探讨如何使用`checkbox`和`combobox`作为`DataGrid`的`itemRenderer`和`headerRenderer`...

    flex datagrid 实现合计功能控件包

    flex datagrid 实现合计功能控件包 带源码,demo fxp是flex4的工程文件,导入到工作空间即可 直接导入项目即可。 更多访问我的blog www.dplayer.net

    flex datagrid 表格 合计

    Flex DataGrid 是 Adobe Flex 框架中的一个组件,它用于在应用程序中显示表格数据。在Flex中,实现数据网格的总计功能是一项常见的需求,它能够帮助用户快速地理解和分析大量数据。本项目提供了一个已经实现了总计...

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

    ItemRenderer是一个Flex组件,它负责渲染DataGrid中的每一行。在自定义ItemRenderer中,我们可以根据数据源中的属性值来设置背景颜色。以下是一个简单的自定义ItemRenderer示例: ```actionscript public class ...

    flex datagrid checkbox实现源码

    在Flex中,可以使用ListCollectionView或ArrayCollection作为数据源,然后在DataGrid的itemRenderer中添加复选框组件。 3. **解决滚动条导致的选中混乱问题** 当DataGrid有滚动条时,如果未正确处理复选框状态,...

    flex datagrid

    Flex DataGrid是一个强大的数据展示组件,它在Adobe Flex框架中被广泛使用,用于显示和操作大量结构化的数据。这个组件提供了灵活的布局选项,可定制的列格式化,以及丰富的用户交互功能,如排序、筛选和编辑。...

    将Flex DataGrid数据导出到Excel中

    在开发基于Adobe Flex的应用程序时,我们经常遇到需要将数据展示在用户友好的方式中,例如使用DataGrid组件。然而,有时用户希望将这些数据显示在更传统的格式中,如Microsoft Excel电子表格。本教程将详细介绍如何...

    flex DataGrid xml 动态数据列表实例

    `DataGrid`组件是Flex提供的一种强大的工具,用于显示表格形式的数据。在这个实例中,我们将探讨如何利用Flex的`DataGrid`组件结合XML文件来实现动态数据列表。 首先,让我们深入了解`DataGrid`组件。`DataGrid`是...

    Flex DataGrid 分页

    Flex DataGrid 分页是Adobe Flex开发中一个关键的用户界面组件功能,用于处理大量数据时提高性能和用户体验。在Web应用程序中,一次性加载所有数据可能导致页面加载缓慢,消耗大量内存,而分页则能有效地解决这个...

Global site tag (gtag.js) - Google Analytics