2009-10-21 6 views
0

내 응용 프로그램의 DataGrid에 표시 값을 표시하려고합니다. 나는 모든 값을 XML 파일로 가지고있다. 데이터 그리드의 한 행만 채우기 위해 XML 파일의 레코드 집합이 하나만있었습니다. 즉, 코드를 사용하여 응용 프로그램 파일의 Array 컬렉션에XML 파일에서 배열로 값을 가져 오는 중 오류가 발생했습니다.

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

말을 내가 오류가

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

을, XML 파일의 값을 저장하려고하지만 동안 나는 두 개의 기록이있는 경우 XML 파일에서 설정, 그것은 잘 작동합니다. 단 하나의 세트가 있다면 위의 오류가 발생합니다. 이 경우 어떤 문제가 있습니까?

여기 내 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> 

그리고 이것은 내가 세부 사항을 표시 할 데이터 그리드입니다.

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

데이터 그리드에 표시 할 레코드가 하나만 필요한 경우가 있습니다. 그런 경우 어떻게이 오류를 해결합니까?

답변

3

내 이해는 <mx:Model> 선언이 아마도 대신 있어야한다는 것입니다. 솔직히 어느 쪽도 사용하지 않았지만 내 독서 here에서 그것은 mx:Model 선언이 xml을 객체 (ObjectProxy)로 바꾸는 것처럼 보입니다. 그래서 문제에 따라 하나의 "항목"을 만나면이를 프록시 내의 키 : 값 쌍 (예 : 간단한 개체)으로 변환합니다. 여러 개의 "Item"을 만날 때 대신 Array에 넣습니다. 즉, 내용의 구조는 예측할 수 없습니다.

그래서 mx : XML (형식 = "e4x")을 사용하고 ArrayCollection 대신 XMLListCollection을 사용하는 경우 {reviewList.Item}을 소스로 사용할 수 있습니다.

+0

예 .. 정확합니다. XML 및 XMLListCollection 태그를 사용하는 경우에는 그 문제가 발생하지 않습니다. 하나의 레코드가 있더라도 DataGrid에 표시됩니다. ur 도움에 감사드립니다. – Angeline

관련 문제