【问题标题】:Populating a cell in a dataGrid with multiple values seperated by commas - Flex使用逗号分隔的多个值填充 dataGrid 中的单元格 - Flex
【发布时间】:2011-09-24 07:23:01
【问题描述】:

我有一个包含这些数据的 XML 文件。

<resultSet> 
<MerchandiseAssortmentCategory>
                                <merchandiseAssortmentCategoryId>275</merchandiseAssortmentCategoryId>
                                <merchandiseAssortmentCategoryName>D21 Plywood</merchandiseAssortmentCategoryName>
                                <merchandiseSubordinateClasses>
                                                <merchandiseSubordinateClass>
                                                                <merchandiseSubordinateClassNumber>2</merchandiseSubordinateClassNumber>
                                                                <merchandiseSubordinateClassDescription>SHEATHING</merchandiseSubordinateClassDescription>
                                                </merchandiseSubordinateClass>
                                                <merchandiseSubordinateClass>
                                                                <merchandiseSubordinateClassNumber>3</merchandiseSubordinateClassNumber>
                                                                <merchandiseSubordinateClassDescription>WAFERBOARD</merchandiseSubordinateClassDescription>
                                                </merchandiseSubordinateClass>
                                                <merchandiseSubordinateClass>
                                                                <merchandiseSubordinateClassNumber>4</merchandiseSubordinateClassNumber>
                                                                <merchandiseSubordinateClassDescription>SANDED</merchandiseSubordinateClassDescription>
                                                </merchandiseSubordinateClass>
                                </merchandiseSubordinateClasses>
</MerchandiseAssortmentCategory>
</resultSet> 

我需要用同一行中的商品分类类别名称及其所有商品子类别编号填充数据网格,并用逗号分隔。

categoryList 是 dataGrid 的数据提供者,定义如下:

this.categoryList= evt.result.resultSet.MerchandiseAssortmentCategory;

这就是 dataGrid 的定义方式

<mx:DataGrid x="466" y="73" width="192" height="225" 
        dataProvider="{categoryList}" 
        verticalScrollPolicy="on" 
        id="categories"
        rowCount="10" enabled="true">
        <mx:columns>
            <mx:DataGridColumn headerText="Category name" dataField="merchandiseAssortmentCategoryName"/>
            <mx:DataGridColumn headerText="Subclasses" dataField="merchandiseSubordinateClasses.merchandiseSubordinateClass.merchandiseSubordinateClassNumber"/>

            </mx:columns>
    </mx:DataGrid>

当我运行它时,只填写类别名称。下级编号只是空白。帮忙解决这个问题。谢谢

【问题讨论】:

    标签: xml apache-flex file datagrid populate


    【解决方案1】:

    您将不得不编写一个 labelFunction 来返回您希望在列中显示的逗号分隔列表。

    阅读有关创建custom label function 的这些文档。以下是一些相关细节:

    [开始报价]

    您可以将标签函数传递给 List 控件,以提供确定控件中出现的文本的逻辑。标签函数必须具有以下签名:

    labelFunction(item:Object):String
    

    Label控件传入的item参数包含列表项对象。该函数必须返回要在 List 控件中显示的字符串。

    注意:ListBase 的大多数子类也采用带有上述签名的 labelFunction 属性。对于DataGrid和DataGridColumn控件,方法签名为labelFunction(item:Object, dataField:DataGridColumn):String,其中item包含DataGrid项对象,dataField指定DataGrid列。

    ....

    <mx:Script><![CDATA[
        public function myLabelFunc(item:Object):String {
            return item.data + ", " + item.label; 
        }
    ]]></mx:Script>
    

    [结束引用]

    item对象参数是你要为其生成标签的dataProvider的元素。

    您可以在相关类上指定 labelFunction 属性:

    <mx:DataGridColumn labelFunction="myLabelFunc" />
    

    您也可以使用自定义 itemRenderer 执行相同的操作。

    【讨论】:

    • 可以使用自定义 itemRenderer 做同样的事情,但 labelFunction 是进行基于字符串的数据转换的最佳方式。
    • labelFunction 怎么写?
    • 查看使用标签函数的部分:livedocs.adobe.com/flex/3/html/…。我会更新我的答案。
    • 是的 labelFunction 是有道理的......但我什至如何访问该字段。它在嵌套的 XML 和 dataGrid 的 dataField 中不解析:( 任何帮助将不胜感激
    • 传递给 labelFunction 的“对象”将是您的 XML 对象。在调试模式下运行并使用它来确定如何深入研究 XML 结构。
    【解决方案2】:

    我会这样做:

    1. 为 DataGrid 中的 Subclasses 列创建自定义 itemRenderer。
    2. 重写 set data 方法以遍历所有子类并构建逗号分隔的字符串。
    3. 将 itemRenderer 的标签值设置为逗号分隔的字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多