【问题标题】:follow up question problem with selecting a custom itemrenderer in a datagrid在数据网格中选择自定义 itemrenderer 的后续问题
【发布时间】:2010-03-15 17:35:12
【问题描述】:

我已经发布了自定义 itemRenderer see this post 的两个问题。我的主要问题是,它总是选择错误的行(在我选择的行之下)。我现在意识到,当我将 itemRenderer 的内容保存回 dataProvider 时,就会发生这种情况。如果我将这部分编码出来,dataGrid 将按预期工作......

这对你有意义吗?

谢谢 马库斯

【问题讨论】:

    标签: apache-flex datagrid


    【解决方案1】:

    我将问题提取到了几行代码中:

    CustomRenderer.mxml:

    <mx:Script>
        <![CDATA[
            import components.ChoiceRenderer;
            import mx.rpc.events.ResultEvent;
            import mx.events.DataGridEvent;
    
            private function resultHandler(event:ResultEvent):void {            
                var doc:XML = event.result as XML;
                testGrid.dataProvider = doc.Records.BackSide;           
            }
    
            private function saveBackDataGridContent(event:DataGridEvent):void{                 
                testGrid.dataProvider[event.rowIndex].TextElement = event.currentTarget.itemEditorInstance.text;                        
            }               
    
            ]]>
    </mx:Script>
    <mx:HTTPService id="dataService" result="resultHandler(event)" url = "data/example.xml" resultFormat="e4x"/>
    
    <mx:DataGrid id="testGrid" editable="true" itemEditEnd="saveBackDataGridContent(event)">
          <mx:columns>
            <mx:DataGridColumn itemRenderer="components.ChoiceRenderer" width="230"/>
      </mx:columns>
    </mx:DataGrid>
    

    ChoiceRenderer.as

    package components
    {
        import mx.containers.HBox;
        import mx.controls.CheckBox;
        import mx.controls.Label;
    
        public class ChoiceRenderer extends HBox
        {
    
            private var correctAnswer:CheckBox;
            private var choiceLabel:Label;
    
            public function ChoiceRenderer()
            {
                super();                                
                setStyle("horizontalScrollPolicy", "off");
                correctAnswer = new CheckBox;
                addChild(correctAnswer);            
                choiceLabel = new Label;
                addChild(choiceLabel);      
            }
    
            override public function set data(xmldata:Object):void{
                if(xmldata.name() == "BackSide"){
                    super.data = xmldata.TextElement[0];
                    choiceLabel.text = xmldata.TextElement[0].toString();
                }
            }
        }
    }
    

    example.xml

    <TopContainer>
    <Records>
        <BackSide>
            <TextElement>first</TextElement>                            
        </BackSide>
        <BackSide>
            <TextElement>second</TextElement>                       
        </BackSide>
        <BackSide>
            <TextElement>third</TextElement>                            
        </BackSide>
        <BackSide>
            <TextElement>fourth</TextElement>                       
        </BackSide>
        <BackSide>
            <TextElement>fifth</TextElement>                        
        </BackSide>
        <BackSide>
            <TextElement>sixth</TextElement>                        
        </BackSide>
    </Records>
    

    谢谢 马库斯

    【讨论】:

      【解决方案2】:

      这可能不是问题,但我建议在 createChildren 方法中添加子项,如下所示:

      override protected function createChildren() : void {
                  correctAnswer = new CheckBox();
                  addChild(correctAnswer);            
                  choiceLabel = new Label();
                  addChild(choiceLabel);      
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-03
        • 1970-01-01
        • 2011-10-12
        • 2012-01-21
        • 1970-01-01
        • 2011-11-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多