2009-10-19 4 views
0

Я пытаюсь отобразить список элементов в datagrid из XMLList.Глубокие вложенные XML

<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 с двумя рядами, первая строка имеет 1 в колонке серии, а затем два файла забиты во вторую ячейку в одной и той же строке. Вторая строка такая же, но имеет номер 2 в столбце «Серии» и два файла серии №2, забитые в ячейку рядом с ней.

Если я не использовать вложенный класс данных я могу вытащить файлы с помощью Series.file вместо и все 4 списка файлов правильно, однако я не получаю номер серии для каждого ...

ответ

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()[email protected]; 
} 

UPDATE:

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

Спасибо за ответ, как вы могли бы предложить разделения сетей передачи данных? как бы сетка Series знала, сколько ячеек заполняется первым номером серии? Я действительно не понимаю код выше, я знаю, как он должен работать, но я не могу заставить его работать. Я добавил функцию в качестве публичной функции в тег mx: Script. – medoix

+0

Ваш xml не очень хорошо сформирован. '' неверно, измените его на '' – Amarghosh

+0

change dataProvider from 'filesList.series.file' to' filesList.Series.file' (верхняя строка) – Amarghosh