自定义dataGrid中的非常奇怪的行为

时间:2010-03-16 16:55:52

标签: flex datagrid

我有一个带有自定义itemRenderer的dataGrid。每次我在dataGrid上至少选择两次时,我选中的单元格下面的单元格就会被选中。如果我取消注释方法saveBackDataGridContent()!

中的代码,则不会发生这种情况

第二个问题是,如果Line比输入的文本短,则horizo​​ntalScrollBar将变为活动状态,虽然我设置了setStyle(“horizo​​ntalScrollPolicy”,“off”); ...(更新:此问题已解决,请参阅下文!)

谁可以解决那个?

  

CustomRenderer.mxml:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="dataService.send()">
 <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>
</mx:Application>
  

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

我无法相信,这个问题是如此重要,但到目前为止我还没有找到任何解决方案......这不是我要做的标准功能吗?

由于 马库斯

1 个答案:

答案 0 :(得分:2)

你的冒充问题相当庞大,但有些指针可能会给你带来麻烦。

ItemRenderers被回收。这可能是您的问题之一,您需要确保itemRenderer中的任何if语句也有一个else语句(这会将其设置回默认状态)。使用渲染器时,这是一个常见的陷阱。

此行setStyle("horizontalScrollPolicy", "off");无效,因为horizo​​ntalScrollPolicy是属性,而不是样式。

修复这些情况,然后查看您的位置。

另请阅读本文:

http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html

这一个:

http://www.adobe.com/devnet/flex/articles/itemrenderers_pt2.html

他们帮助我了解项目渲染器及其许多怪癖。