我正在尝试从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>
我当前的代码允许我将每个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个文件都正确列出,但是我没有得到每个文件的序列号...
答案 0 :(得分:1)
使用xml的当前结构,使用两列网格更容易表示它 - 第一列是序列号,第二列是另一个显示文件详细信息的2或3列DataGrid。但是如果你不想改变结构,下面的代码就是你需要的。请注意,由于未设置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