2009-10-21 5 views
0

J'essaie d'afficher des valeurs dans une grille de données dans mon application. J'ai toutes les valeurs dans un fichier xml. J'ai eu seulement un ensemble d'enregistrement dans le fichier XML, pour remplir seulement une ligne de la grille de données. Tout en essayant de stocker les valeurs du fichier XML à une collection Array dans le fichier d'application à l'aide du code, à savoirErreur lors de l'obtention de valeurs du fichier XML dans le tableau Collection dans Flex

<mx:Model id="reviewList" source="assets/reviewList.xml"/> 
<mx:ArrayCollection id="reviewlist" source="{reviewList.Item}"/> 

Je reçois une erreur, en disant

Error No# 1034: Type coercion failed cannot convert mx.utils::ObjectProxy to Array. 

Mais si j'ai deux enregistrement définit dans le fichier XML, cela fonctionne très bien. S'il n'y a qu'un seul ensemble, je reçois l'erreur ci-dessus? Quel est le problème dans ce cas?

Voici mon fichier xml:

<ReviewList> 
<Item> 
    <ReviewId>1123</ReviewId> 
    <TaskType>User Requirement Specification</TaskType> 
    <RequestId>1223</RequestId> 
    <ItemCodeVersion>URS - 1</ItemCodeVersion> 
    <ReviewStartDate>29-Sep-2009</ReviewStartDate> 
    <Status>Review In Progress</Status> 
    <Reviewer>MR.RISHU GHOSE</Reviewer> 
    <OpenDefect>0</OpenDefect> 
    <CasualAnalysisPending>0</CasualAnalysisPending> 
    <CloseDefects>0</CloseDefects> 
    <VerifiedDefects>0</VerifiedDefects> 
</Item> 

</ReviewList> 

Et c'est le DataGrid où je veux les détails à afficher.

<mx:DataGrid id="reviewDG" dataProvider="{reviewlist}" variableRowHeight="true" width="100%" height="200" 
        horizontalScrollPolicy="off"> 

<mx:columns> 
    <mx:DataGridColumn headerText="Review Id" dataField="ReviewId" textAlign="center" /> 

    <mx:DataGridColumn headerText="Task Type" dataField="TaskType" textAlign="center"/> 

    <mx:DataGridColumn headerText="Request Id" dataField="RequestId" textAlign="center"/> 

    <mx:DataGridColumn headerText="Item Code-Ver" dataField="ItemCodeVersion" textAlign="center" headerWordWrap="true"/> 

    <mx:DataGridColumn headerText="Review Start Date" dataField="ReviewStartDate" textAlign="center" headerWordWrap="true"/> 

    <mx:DataGridColumn headerText="Status" dataField="Status" textAlign="center"/> 

    <mx:DataGridColumn headerText="Reviewer" dataField="Reviewer" textAlign="center"/> 

    <mx:DataGridColumn headerText="Open Defect" dataField="OpenDefect" textAlign="center" headerWordWrap="true"/> 

    <mx:DataGridColumn headerText="Casual Analysis Pending" dataField="CasualAnalysisPending" textAlign="center" headerWordWrap="true"/> 

    <mx:DataGridColumn headerText="Close Defects" dataField="CloseDefects" textAlign="center" headerWordWrap="true"/> 

    <mx:DataGridColumn headerText="Verified Defects" dataField="VerifiedDefects" textAlign="center" headerWordWrap="true"/> 

    <mx:DataGridColumn headerText="Review Details" dataField="ReviewDetails" width="65" headerWordWrap="true"> 
    <mx:itemRenderer> 
     <mx:Component> 
     <mx:Label text="View" click="outerDocument.onViewClick()"/> 
     </mx:Component> 
    </mx:itemRenderer> 
    </mx:DataGridColumn> 


</mx:columns> 
    </mx:DataGrid>  

Il peut y avoir des cas dans ma demande où je dois un seul enregistrement à afficher dans la grille de données. Dans de tels cas, comment puis-je résoudre cette erreur?

Répondre

3

Ma compréhension est que la déclaration <mx:Model> devrait probablement être à la place. Honnêtement jamais utilisé non plus, mais à partir de ma lecture here il semble que la déclaration mx:Model transforme le xml en un objet (ObjectProxy). Donc en fonction de votre problème, je devine que s'il rencontre un seul "Item", il le transforme en une clé: paire de valeurs (par exemple, Object simple) dans le proxy. Quand il rencontre plusieurs "objets", il les place dans un tableau à la place. Autrement dit, la structure du contenu est probablement imprévisible. Donc, si vous utilisez mx: XML (avec format = "e4x"), et utilisez un XMLListCollection au lieu de ArrayCollection, vous pouvez utiliser {reviewList.Item} comme source.

+0

Ya .. Vous avez raison. En utilisant les balises XML et XMLListCollection, je n'ai pas ce problème. Même avec un enregistrement, il est affiché dans le DataGrid. Merci pour votre aide. – Angeline

Questions connexes