2009-06-05 8 views
1

私は3つの列を持ち、最後の列の既定の可視状態はfalseです。私の問題は、特定の行のどの部分にもマウスを置いてください。Flex(DataGrid)、特定のセルの可視状態を変更する方法

英語は母国語ではありませんので、十分に質問をしなかった場合は、お読みください。私はROW1の任意の列の上にマウスながらセル(ROW1、COLUMN3)を表示することができますどのように

 
------------------------------------------------ 
| column1 | column2 | column3 (invisible) | row1 
| column1 | column2 | column3 (invisible) | row2 
------------------------------------------------ 

。 COLUMN1そのようにアイテムをロールオーバーするときに、簡単に列全体の可視性を切り替えることができます

答えて

0

:もちろん

<mx:DataGrid dataProvider="{[{c1:'a1', c2:'b1', c3:'c1'}]}"> 
    <mx:columns> 
     <mx:DataGridColumn headerText="Column 1" dataField="c1"> 
      <mx:itemRenderer> 
       <mx:Component> 
        <mx:Label text="{listData.label}" 
         rollOver="DataGrid(owner).columns[2].visible = true" 
         rollOut="DataGrid(owner).columns[2].visible = false" 
        > 
         <mx:Script> 
          <![CDATA[ 
           import mx.controls.DataGrid; 
          ]]> 
         </mx:Script> 
        </mx:Label> 
       </mx:Component> 
      </mx:itemRenderer> 
     </mx:DataGridColumn> 
     <mx:DataGridColumn headerText="Column 2" dataField="c2" /> 
     <mx:DataGridColumn headerText="Column 3" dataField="c3" visible="false" /> 
</mx:DataGrid> 

を、あなたはより良い代わりに、インラインアイテムレンダラーの新しいクラスを作成したいです。

3列目のレンダラーのみを表示するのは非常に難しいです。なぜなら、列全体が見えない場合、その列のレンダラーは作成されないからです。

は、私はこのように、ツールチップのようなソリューションを使用する方が良いと思う:

<mx:Script> 
<![CDATA[ 
    import test.CellRenderer; 
]]> 
</mx:Script> 
<mx:UIComponent id="textFlowContainer" width="100%" height="100%" /> 
<mx:DataGrid dataProvider="{[{c1:'a1', c2:'b1', c3:'c1'}]}"> 
    <mx:columns> 
     <mx:DataGridColumn headerText="Column 1" dataField="c1" itemRenderer="{new ClassFactory(CellRenderer)}" /> 
     <mx:DataGridColumn headerText="Column 2" dataField="c2" itemRenderer="{new ClassFactory(CellRenderer)}" /> 
    </mx:columns> 
</mx:DataGrid> 

test.CellRendererである場合:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Label xmlns:mx="http://www.adobe.com/2006/mxml" text="{listData.label}" 
     rollOver="rollOverHandler()" rollOut="rollOutHandler(event)"> 
<mx:Script> 
    <![CDATA[ 
     import mx.managers.PopUpManagerChildList; 
     import mx.managers.PopUpManager; 
     import mx.controls.Label; 
     import mx.controls.DataGrid; 

     private var popupLabel:Label; 

     private function rollOverHandler():void 
     { 
      popupLabel = new Label(); 
      popupLabel.addEventListener(MouseEvent.ROLL_OUT, rollOutHandler); 
      popupLabel.text = data.c3; 
      PopUpManager.addPopUp(popupLabel, this, false, PopUpManagerChildList.PARENT); 
      var p1:Point = new Point(0, this.y); 
      p1 = localToGlobal(p1); 
      var p2:Point = new Point(listData.owner.x+listData.owner.width, 0); 
      p2 = listData.owner.parent.localToGlobal(p2); 
      popupLabel.move(p2.x, p1.y); 
     } 

     private function rollOutHandler (event:MouseEvent):void 
     { 
      if (popupLabel && !popupLabel.hitTestPoint(event.stageX, event.stageY)) 
      { 
       PopUpManager.removePopUp(popupLabel); 
       popupLabel = null; 
      } 
     } 
    ]]> 
</mx:Script> 
</mx:Label> 
+0

おかげで、ニキータ!私は2番目のアプローチについてはわかりませんが、最初のアプローチは私が望んでいない、私が望むのは、列全体ではなく1つのセルを表示することだけです。私は2番目の方法を試し、それがうまくいくかどうかを見てみましょう。 – user76047

+0

2番目のアプローチはまだ問題があります。実際には、特定の行の最後にいくつかのボタンを表示したいので、人々はそれをクリックする必要があります。しかし、ボタンの上にマウスを置くと、rollOutHandlerは即座に消えるようにします。 – user76047

+0

私のソリューションを編集しましたこの状況に対処する。 – Hrundik

関連する問題