2010-03-15 4 views
0

일주일 후 곧 문제가 발생하지만 아직 예상대로 작동하지 않습니다. 나는 DataGrid에 HBox가있는 CheckBox와 itemRenderer라는 레이블을 가지고있다 (아래 코드 참조). 셀을 탭하면 표준 itemEditor가 팝업되고 레이블 내용을 입력 할 수 있습니다. 그게 표준 행동입니다.Datagrid가 내 데이터 격자에서 잘못된 사용자 정의 셀을 선택합니다.

내가 많은 텍스트를 입력하면
  1. , 수평 srollbar이 튀어 나올 때, 셀은 그 스크롤로 가득 : 나는이 문제를 제외하고 잘 작동합니다. 보시다시피 horizontalScrollPolicy를 off로 설정하려고 시도했지만 전혀 작동하지 않습니다 ... 모든 다른 요소에 대해 그렇게하려고 시도했지만 실패는 여전히 존재합니다.

  2. 하나 이상의 행을 채울 때 다른 실수가 발생합니다. 행을 탭하면 DataGrid가 해당 행 아래의 행을 선택합니다. 그것은 한 라인이 이미 선택된 경우에만 해당됩니다. DataGrid 바깥을 탭한 다음 오른쪽 행의 itemEditor가 나타나는 모든 행을 탭하면 ... 내 설정 데이터 메소드의 설정에 지금 wright가 있습니까? 사전에

__
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(); 
    paint(); 
    } 

    private function paint():void{ 
    percentHeight = 100; 
    percentWidth = 100; 
    setStyle("horizontalScrollPolicy", "off"); 
    super.setStyle("horizontalScrollPolicy", "off"); 

    correctAnswer = new CheckBox; 
    correctAnswer.setStyle("horizontalScrollPolicy", "off"); 
    addChild(correctAnswer); 

    choiceLabel = new Label; 
    choiceLabel.setStyle("horizontalScrollPolicy", "off"); 
    addChild(choiceLabel); 


    } 

    override public function set data(xmldata:Object):void{ 
     if(xmldata.name() == "BackSide"){ 
     var xmlText:Object = xmldata.TextElements.TextElement.(@position == position)[0]; 
     super.data = xmlText; 
     choiceLabel.text = xmlText.toString(); 
     correctAnswer.selected = [email protected]_answer; 

     }    
} 
} 

감사합니다! 이것이 당신의 문제 뒤에 이유가있는 경우 마르쿠스

답변

0
  • 나는 잘 모르겠지만, 아이를 만드는 표준 방법은 createChildren 메소드를 오버라이드 (override)하는 것입니다.

  • 또한 else 문이 누락되었습니다. if 조건이 실패 할 경우 super.data을 호출하지 않습니다. 그것도 좋지 않습니다.

시도 :

package components 
{ 
public class ChoiceRenderer extends HBox { 
    private var correctAnswer:CheckBox; 
    private var choiceLabel:Label; 

    public function ChoiceRenderer() { 
    super(); 
    percentHeight = 100; 
    percentWidth = 100; 
    setStyle("horizontalScrollPolicy", "off"); 
    } 
    override protected function createChildren():void { 
    super.createChildren(); 
    correctAnswer = new CheckBox(); 
    addChild(correctAnswer); 
    choiceLabel = new Label(); 
    choiceLabel.setStyle("horizontalScrollPolicy", "off"); 
    addChild(choiceLabel); 
    } 
    override public function set data(xmldata:Object):void { 
    if(xmldata.name() == "BackSide") { 
     var xmlText:Object = xmldata.TextElements.TextElement.(@position == position)[0]; 
     super.data = xmlText; 
     choiceLabel.text = xmlText.toString(); 
     correctAnswer.selected = [email protected]_answer; 
    } 
    else { 
     //what if xmldata.name() is not "BackSide"? 
     //you are not calling super.data in that case 
    } 
    } 
} 
+0

감사합니다. 불행히도 그것은 두 가지 문제를 해결하지 못합니다. 왜 내가 else 문을 사용하지 않는 이유는 함수가 전체 행 (XML의 BackSide)을 호출하고 때로는 TextElement를 사용하여 셀을 호출하기 때문입니다. 이유는 모르지만 정확히 ... – Markus

+0

@ Markus 스크롤바 문제와 관련하여 퍼센트 폭과 퍼센트 높이 행을 주석 처리하십시오. – Amarghosh

+0

은 아무 것도 변경하지 않지만 ... setStyle ("horizontalAlign", "center")을 추가했습니다. 진술, 그리고 그 효과가 있었어! ... 나는 그것을 얻지 않는다 ... – Markus

0
  • 데이터 그리드를하게하는 당신이 스크롤 막대를 방지하기 위해 가지고있는 변수 높이 답변에 대한
 

<mx:DataGrid id="dg" 
dataProvider="{dp}" 
variableRowHeight="true" 
creationComplete="dg.height=dg.measureHeightOfItems(0,dp.length)+dg.headerHeight+2"/> 
+0

안녕 Nishu,이 답변 주셔서 감사합니다,하지만 내 문제는 수직 스크롤바가 아니라, 그것은 수평입니다 ... – Markus

+0

사과 오해. wordwrap을 true로 설정하고 datagridcolum.width를 최대 업데이트 셀 및 datagridcolumn.width로 설정하려고 시도해 보셨나요? – Nishu

관련 문제