2011-07-08 19 views
0

DataGrid itemRenderersではかなり風変わりな動作が発生しています。mx:データグリッドでブール値が正しく表示されない

<mx:DataGrid dataProvider="{myBooleans}" width="100%" height="100%"> 
    <mx:columns> 
     <mx:DataGridColumn 
      xmlns:mx="library://ns.adobe.com/flex/mx" 
      headerText="Value" 
      editorDataField="selected" 
      rendererIsEditor="true" 
      itemRenderer="mx.controls.CheckBox" 
      > 
     </mx:DataGridColumn> 
    </mx:columns> 
</mx:DataGrid> 

これを実行し、データグリッドが唯一正しいのitemRenderer場合と行を示しています。次のように最初に
は、私がArrayCollectionのを作成します。

[Bindable] 
private var myBooleans:ArrayCollection = new ArrayCollection([false,true]); 

をし、その後、私は、データグリッドにバインドブール値== true。
boolean == falseの行では、空の行が表示されます。

また、RPC呼び出しでラップされていないブール値のArrayCollectionを受け取るので、ラッパーオブジェクトにブール値をラップすると、それを切断しないことを追加したいと思います。

乾杯

+1

なぜ、単一の列にデータグリッドを使用しますか?なぜリストではないのですか? –

+0

@ J_A_X、デフォルトのソートメカニズムが便利な資産だったからです。 リストパスを歩かなければならないでしょうし、今はソートを廃止している可能性があります。 –

+0

ArrayまたはArrayCollectionでソートするのは非常に簡単です。 –

答えて

3

Flex SDK 3.6; DataGridBaseのライン1070-1071はこれです:あなたのデータオブジェクトが偽であるため、

if (item is IDropInListItemRenderer) 
     IDropInListItemRenderer(item).listData = data ? rowData : null; 

基本的には、null値はlistDataプロパティのためで送信されます。私はレンダラーのレンダリングを妨げる連鎖反応を引き起こすと推測しています。ありがたいことに、setupColumnItemRendererというメソッドが保護されているので、DataGridを拡張することができます。

また、レンダラー内のデータ変更イベントが、dataProvider内の「偽の」項目に対して実行されないように見えました。それは予期せぬことです。

この行を見つけるためにコードをステップ実行するのに30分かかりましたが、私は「答え」が100%であるとは確信していません。

+1

私はちょうどそれを試して、あなたが正しいです!この時点では、RPCコールから返された値をループして適切なオブジェクトに設定するほうが簡単だと思いますが...それ。 –

+0

私はそれが整数でも起こることに気付きました。 [0,1]の配列を作成してプレーンなDataGridColomnを使用すると、DataGridには2つの行が表示され、そのうちの1つは空です。もちろん、それはデータ== 0の行です。 –

+0

@DennisJaamann私はラインがIntegersの犯人であると確信しています。 – JeffryHouser

関連する問題