2010-12-17 6 views
0

글쎄, 내가 하나를 생성하지만 문제의 무리가 : 텍스트가 붙어있다 Flex4에서 사용자 정의 MXAdvancedDataGridItemRenderer을 어떻게 만듭니 까?

TypeError: Error #1009: Cannot access a property or method of a null object reference. at Test/clickHandler()[C:\Documents and Settings\NDEGRAEV\workspace-dummy\Test\src\Test.mxml:27] at Test/___Test_AdvancedDataGrid1_click()[C:\Documents and Settings\NDEGRAEV\workspace-dummy\Test\src\Test.mxml:31]

  • : 나는 렌더링 된 열을 클릭하면

    • 내가 오류가 발생을 셀의 왼쪽 위 모서리;
    • 셀의 배경이 선택한 셀의 배경으로 변경되지 않습니다.

    내가 플렉스에 새로 온 사람과 나는 아마 완전히 잘못하고 있어요 그러나 여기 인터넷에서 사용자 정의 MXAdvancedDataGridItemRenderer의 많은 예는 없습니다. 올바른 방향으로 나를 가리킬 수 있습니까?

    Test.mxml

    <?xml version="1.0" encoding="utf-8"?> 
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" 
           xmlns:test="*" 
           initialize="init()"> 
        <fx:Script> 
         <![CDATA[ 
          import mx.collections.ArrayCollection; 
          import mx.controls.Alert; 
    
          [Bindable] 
          private var data:ArrayCollection = new ArrayCollection(); 
    
          private function init():void { 
           var dataItem:DataItem = new DataItem(1000, 1000); 
           this.data.addItem(dataItem); 
           dataItem = new DataItem(1001, 1001); 
           this.data.addItem(dataItem); 
          } 
    
          private function clickHandler(e:Event):void { 
           var dataItem:DataItem = e.currentTarget.selectedItem as DataItem; 
           Alert.show(dataItem.col1 + ' ' + dataItem.col2); 
          } 
         ]]> 
        </fx:Script> 
        <mx:AdvancedDataGrid dataProvider="{data}" click="clickHandler(event);" x="0" y="0" designViewDataType="flat"> 
         <mx:columns> 
          <mx:AdvancedDataGridColumn dataField="col1" headerText="Column 1"/> 
          <mx:AdvancedDataGridColumn dataField="col2" headerText="Column 2" id="column2"/> 
         </mx:columns> 
         <mx:rendererProviders> 
          <mx:AdvancedDataGridRendererProvider column="{column2}" renderer="MyRenderer" /> 
         </mx:rendererProviders> 
        </mx:AdvancedDataGrid> 
    </s:Application> 
    

    나 자신 해결책을 발견

    <?xml version="1.0" encoding="utf-8"?> 
    <s:MXAdvancedDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark" 
                xmlns:mx="library://ns.adobe.com/flex/mx" 
                focusEnabled="true"> 
        <s:Label id="lblData" /> 
        <fx:Declarations> 
         <mx:NumberFormatter id="numberformatter" useThousandsSeparator="true" /> 
        </fx:Declarations> 
        <fx:Script> 
         <![CDATA[ 
          override public function set data(value:Object):void { 
           if (value.col1 > 1000) { 
            lblData.text = numberformatter.format(value.col2); 
           } else { 
            lblData.text = value.col2; 
           } 
          } 
         ]]> 
        </fx:Script> 
    </s:MXAdvancedDataGridItemRenderer> 
    
+0

흠, 내 코드가 제대로 표시되지 않은 반감을 . XML을 어떻게 삽입합니까? – Koohoolinn

+0

편집기에서 코드를 선택하고 "코드 샘플"버튼을 클릭하십시오. 아이콘에 1과 0이있는 아이콘입니다. –

답변

0

MyRenderer.mxml :

<s:MXAdvancedDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            xmlns:mx="library://ns.adobe.com/flex/mx" 
            focusEnabled="true"> 
    <s:Label text="{format(this.row)}" width="100%" height="100%" verticalAlign="middle" paddingLeft="5"/> 
    <fx:Declarations> 
     <mx:NumberFormatter id="numberformatter" useThousandsSeparator="true" /> 
    </fx:Declarations> 
    <fx:Script> 
     <![CDATA[ 
      [Bindable] 
      private var row:DataItem; 

      override public function set data(value:Object):void { 
       this.row = value as DataItem; 
      } 

      override public function get data():Object { 
       return this.row 
      } 

      private function format(row:DataItem):Object { 
       if (row.col1 > 1000) { 
        return numberformatter.format(row.col2); 
       } else { 
        return row.col2; 
       } 
      } 
     ]]> 
    </fx:Script> 
</s:MXAdvancedDataGridItemRenderer> 
관련 문제