Очень странное поведение в пользовательских dataGrid - PullRequest
0 голосов
/ 16 марта 2010

У меня есть dataGrid с пользовательским itemRenderer. Каждый раз, когда я вкладываю по крайней мере два раза в dataGrid, выделяется ячейка ниже той, которую я приклеил. Этого не произойдет, если я раскомментирую код в методе saveBackDataGridContent ()!

Вторая проблема заключается в том, что если строка будет короче введенного текста, будет активна горизонтальная полоса прокрутки, хотя я установил setStyle ("horizontalScrollPolicy", "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>

Я не могу поверить, что эта проблема такая большая, но я пока не могу найти никакого решения ... Разве это не стандартная функция, которую я пытаюсь сделать?

Спасибо Markus

1 Ответ

2 голосов
/ 16 марта 2010

Вопрос, который вы задаете, довольно велик, но некоторые указания могут доставить вам неприятности.

ItemRenderers переработаны. Это может быть одной из ваших проблем, вам нужно убедиться, что любые операторы if в вашем itemRenderer также имеют оператор else (который вернул бы его в состояние по умолчанию). Это распространенная ошибка при работе с визуализаторами.

эта строка setStyle("horizontalScrollPolicy", "off"); не будет работать, потому что horizontalScrollPolicy - это свойство, а не стиль.

Исправьте эти ситуации и посмотрите, где вы находитесь.

Также прочитайте эту статью:

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

А вот этот:

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

Они помогли мне понять средства визуализации предметов и их многочисленные причуды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...