【问题标题】:How to merge cells in DataGrid/AdvancedDataGrid in Adobe Flex如何在 Adob​​e Flex 中合并 DataGrid/Advanced DataGrid 中的单元格
【发布时间】:2011-10-18 03:29:55
【问题描述】:

我需要合并如图所示的单元格:

【问题讨论】:

    标签: apache-flex datagrid advanceddatagrid


    【解决方案1】:

    Flex(在我的理解中)没有直接提供这个。你有几个选择。

    无论哪种方式,您都可能需要在分层模型中排列数据。 (有 3 个孩子的父母似乎描述了您的问题)

    我看到的第一个选项是直接将您的数据声明为高级数据网格的分层结构。如果您搜索分层高级数据网格,您应该能够在线找到教程。

    或者,您可能希望始终显示数据,而不仅仅是在展开父级时。在这种情况下,您仍然需要分层模型,但您必须创建一个自定义 itemrenderer 来表示一个父对象的所有子数据。 (在 VBox/VGroup 中具有三个标签的 itemrenderer 将适用于您给出的示例)

    如果这些没有帮助,或者您想了解更多关于一种或另一种解决方案的详细信息,请随时在评论中提问。

    编辑::

    作为 itemrenderer 的示例,这里是我使用过的类似 itemrenderer 的来源。 (我的只填充了两个标签,但如果你理解它在做什么,你应该能够扩展它)

    <VBox xmlns:mx="http://www.adobe.com/2006/mxml" 
        implements="mx.controls.listClasses.IDropInListItemRenderer"
        width="100%" height="100%" 
        verticalGap="0" paddingTop="5" paddingBottom="5" 
        horizontalScrollPolicy="off"
        horizontalAlign="center">
    
        <mx:Script>
            <![CDATA[
                import mx.controls.Label;
                import mx.controls.dataGridClasses.DataGridListData;
                import mx.controls.listClasses.BaseListData;
    
                private var _listData:BaseListData;
    
                [Bindable("dataChange")]
    
                // Define the getter method.
                public function get listData():BaseListData
                {
                    return _listData;
                }
                // Define the setter method,
                public function set listData(value:BaseListData):void
                {
                    _listData = value;
                }
    
            override public function set data(value:Object):void
            {
                removeAllChildren();
    
                if (value != null)
                {
                    var myListData:DataGridListData = DataGridListData(listData);
    
                    var lLabel1:Label = new Label();
                    var lLabel2:Label = new Label();
    
    
                    lLabel1.text = value[myListData.dataField][0];
                    lLabel1.percentWidth = 0;
                    addChild(lLabel1);
    
                    lLabel2.text = value[myListData.dataField][1];
                    lLabel2.percentWidth = 0;
                    addChild(lLabel2);
                }
    
            } 
            ]]>
        </mx:Script>
    </VBox>
    

    我删除了很多专有代码,所以如果没有任何意义,请告诉我。

    这是为了可重用,因此 value[myListData.dataField],但如果您愿意,您可以通过自己定义字段轻松使其更加具体。此特定代码需要以下格式的数据,例如:

    value[field][0] = "text1";
    value[field][1] = "text2";
    

    对象有:

    var field:Array = [];
    
    field[0] = "text1";
    field[1] = "text2";
    

    【讨论】:

    • +1 获得所需功能的唯一方法是将AdvancedDataGridHierarcichalData 结合使用。
    • 这个建议很好,但是我需要在合并的单元格中显示一些垂直文本,我想知道在这种情况下我可以使用 itemRenderer。
    • 我附上了一些示例代码,@Mr. G. 让我知道这是否有帮助,或者您是否想要更多。
    • 非常感谢@samdehaan 的帮助,但您共享的 sn-p 实际上是在一个单元格中表示两个数据,而我想垂直合并三个或更多单元格。我已经为你的回答投了赞成票:)
    • 是的。使用这种 itemRenderer 的实现将要求您将数据合并到子集合的集合中,其中每个子集合将是原始数据集的单个项目。我可以稍微添加一些代码来表示它是如何工作的。
    猜你喜欢
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    相关资源
    最近更新 更多