在显示层次结构数据时,如何从AdvancedDataGrid中的子行中排除特定列?

时间:2012-06-14 13:42:56

标签: flex advanceddatagrid

我有一个AdvancedDataGrid,它以分层方式显示信息;网站列表及其相关子区域。

数据结构是:

public interface ISite
{
    function get displayName():String
    function get siteCode():String
    function get name():String
    function get subAreas():ArrayCollection
}

public interface ISubArea
{
    function get displayName():String
    function get siteCode():String
    function get name():String
    function get subAreaCode():String
}

我想在网格中显示三条信息。在树的根部我想显示站点的displayName。对于SubArea'S我想显示两列,一列用于siteCode,另一列用于名称。

我已经非常接近,遗憾的是,所有三列都显示在子行中。我还没想出如何从子行中删除Site的displayName列。

有关如何做到这一点的任何想法?这是一个屏幕抓取,描述了迄今为止的结果并注释了所需的结果。产生此结果的MXML代码可以在图像之后找到。

enter image description here

<mx:AdvancedDataGrid width="100%" height="100%" showHeaders="false" textAlign="left">
    <mx:dataProvider>
        <mx:HierarchicalData source="{pmodel.sites}" childrenField="subAreas"/>
    </mx:dataProvider>
    <mx:columns>
        <mx:AdvancedDataGridColumn dataField="displayName"/>
        <mx:AdvancedDataGridColumn dataField="siteCode"/>
        <mx:AdvancedDataGridColumn dataField="name"/>
    </mx:columns>
    <mx:rendererProviders>
        <mx:AdvancedDataGridRendererProvider 
            depth="1" 
            columnIndex="0" 
            columnSpan="0" 
            renderer="mx.controls.advancedDataGridClasses.AdvancedDataGridGroupItemRenderer"/>
    </mx:rendererProviders> 
</mx:AdvancedDataGrid>

1 个答案:

答案 0 :(得分:2)

我发现了一个非常简单且可行的解决方案。

将第一列(displayName)的宽度设置为零为&#34;隐藏&#34;数据网格中的那一列。使用AdvancedDataGridRendererProvider配置该列以跨越数据网格根目录下的所有列。由于跨越多列,第一列的文本仍将显示在根目录,并将隐藏在数据网格中的所有其他深度。

<mx:AdvancedDataGrid width="100%" height="100%" showHeaders="false" textAlign="left">
    <mx:dataProvider>
        <mx:HierarchicalData source="{pmodel.sites}" childrenField="subAreas"/>
    </mx:dataProvider>
    <mx:columns>
        <mx:AdvancedDataGridColumn dataField="displayName" width="0"/>
        <mx:AdvancedDataGridColumn dataField="siteCode"/>
        <mx:AdvancedDataGridColumn dataField="name"/>
    </mx:columns>
    <mx:rendererProviders>
        <mx:AdvancedDataGridRendererProvider 
            depth="1" 
            columnIndex="0" 
            columnSpan="0" 
            renderer="mx.controls.advancedDataGridClasses.AdvancedDataGridGroupItemRenderer"/>
    </mx:rendererProviders> 
</mx:AdvancedDataGrid>