代码之家  ›  专栏  ›  技术社区  ›  medoix

深嵌套XML

  •  0
  • medoix  · 技术社区  · 16 年前

    我试图从XMLList中显示datagrid中的项目列表。

    <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中,然后我有一个nesteddatagrid类,它允许我执行以下操作。

    <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>
    

    但是,这将显示具有两行的datagrid,第一行在Series列中有1行,然后两个文件填充到同一行的第二个单元格中。第二行是相同的,但在序列列中有数字2,两个序列2文件塞进了它旁边的单元格。

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

    1 回复  |  直到 16 年前
        1
  •  1
  •   Amarghosh    16 年前

    对于xml的当前结构,更容易用两列网格表示它——第一列是序列号,第二列是另一个显示文件详细信息的2列或3列数据网格。但是如果你不想改变结构,下面的代码就是你需要的。请注意,由于 dataField 属性未设置,您必须指定 sortCompareFunction

    <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
    
    推荐文章