0

我正在尝试从 XMLList 显示数据网格中的项目列表。

<Series no="1">
    <file>
        <filenum>1</epnum>
        <prodnum>4V01</prodnum>
        <title>Series #1 - File #1</title>
    </file>
    <file>
        <filenum>2</epnum>
        <prodnum>4V02</prodnum>
        <title>Series #1 - File #2</title>
    </file>
</Series>
<Series no="2">
    <file>
        <filenum>1</epnum>
        <prodnum>4V01</prodnum>
        <title>Series #2 - File #1</title>
    </file>
    <file>
        <filenum>2</epnum>
        <prodnum>4V02</prodnum>
        <title>Series #2 - File #2</title>
    </file>
</Series>

我当前的代码允许我将每个系列检索到 XMLList 中,然后我有一个嵌套数据网格类,它允许我做类似的事情。

<classes:NestedDataGrid width="100%" height="100%" id="gridFiles" dataProvider="{filesList}" >
<classes:columns>
<mx:DataGridColumn headerText="Season" dataField="@no" width="60"/>
<mx:DataGridColumn headerText="Episode" dataField="file.filenum" width="60"/>
<mx:DataGridColumn headerText="Title" dataField="file.title"/>
</classes:columns>
</classes:NestedDataGrid>

但是,这将显示具有两行的数据网格,第一行在 Series 列中有 1,然后两个文件塞入同一行的第二个单元格中。第二行是相同的,但在 Series 列中有数字 2,并且两个系列 #2 文件挤在它旁边的单元格中。

如果我不使用嵌套数据类,我可以使用 Series.file 来提取文件,并且所有 4 个文件都正确列出,但是我没有得到每个文件的序列号......

4

1 回答 1

1

使用 xml 的当前结构,用两列网格表示它更容易 - 第一列是序列号,第二列是另一个 2 或 3 列显示文件详细信息的 DataGrid。但是如果你不想改变结构,下面的代码就是你需要的。请注意,由于dataField未设置属性,因此您必须指定 asortCompareFunction用于根据序列号对网格进行排序 - 否则在尝试排序时可能会引发异常。

<classes:NestedDataGrid width="100%" height="100%" id="gridFiles" 
  dataProvider="{filesList.Series.file}" >
  <classes:columns><!-- classes copy pasted from OP's code. Whats that? -->
    <mx:DataGridColumn headerText="Season" labelFunction="getSeries" width="60"/>
    <mx:DataGridColumn headerText="Episode" dataField="filenum" width="60"/>
    <mx:DataGridColumn headerText="Title" dataField="title"/>
  </classes:columns>
</classes:NestedDataGrid>
private function getSeries(item:Object, col:DataGridColumn):String
{
  return XML(item).parent().@no;
}

更新:

<mx:DataGrid width="100%" height="100%" id="gridFiles" > 
  <mx:columns>
    <mx:DataGridColumn headerText="Season" labelFunction="getSeries" width="60"/>
    <mx:DataGridColumn headerText="Episode" dataField="epnum" width="60"/>
    <mx:DataGridColumn headerText="Title" dataField="title"/>
  </mx:columns>
</mx:DataGrid>

gridFiles.dataProvider = XML(event.result).descendants('episode');
//use the same getSeries function as above
于 2009-10-20T04:47:44.027 回答