Domanda

Sto cercando di visualizzare un elenco di elementi in un datagrid da un 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>

Il mio codice attuale mi permette di recuperare tutte le serie in un XMLList e poi ho una classe nesteddatagrid che mi permette di fare le cose come.

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

Tuttavia questo visualizza il datagrid con due file, la prima riga ha 1 nella colonna serie e quindi i due file stipati seconda cella nella stessa riga. La seconda fila è lo stesso, ma ha il numero 2 nella colonna Series e la # 2 file della serie due stipati nella cella accanto ad esso.

Se io non uso la classe di dati annidata posso tirare i file utilizzando Series.file posto e tutti e 4 della lista di file in modo corretto, ma non ho ricevuto il numero di serie per ogni ...

È stato utile?

Soluzione

Con l'attuale struttura del XML, è più facile rappresentare con una griglia di due colonne - prima colonna è il numero di serie, e nella seconda colonna essendo un'altra DataGrid 2 o 3 colonna che mostra i dettagli del file. Ma se non si vuole modificare la struttura, il seguente codice è quello che serve. Si noti che, poiché proprietà dataField non è impostata, è necessario specificare un sortCompareFunction per l'ordinamento della griglia in base al numero di serie -. Altrimenti potrebbe generare eccezioni durante il tentativo di risolvere

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

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top