ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
フォーラム一覧   -   トピック一覧
   Flex Builder 3
     AdvancedDataGrid使用にあたり
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
yakiniku55
投稿日時: 2008-6-8 20:04
一見さん
登録日: 2008-6-8
居住地:
投稿: 2
AdvancedDataGrid使用にあたり
初めて投稿させていただきます。
Flex3 を使用時に起きた不明点、実装できなかった機能について、
質問させていただきます。

作成に当たり実装したい機能。
1.AdvancedDataGridのセル内にitemEditorを使用し、NumericStepperを配置、アルファベット、"-"、" "表示を実装する。

カウンターで上を押した時に、-1の場合"-"→0の場合" "→1の場合"A"→2の場合"B"→3の場合"C"→"4"→"5" という感じに
カウントアップさせたいですが、、

配列で表示するパラメータを定義し、0の場合は配列の0番目のパラメータとってくる。
みたいな機能が実装できたらな。。と思っています。

2.AdvancedDataGridのセル内にitemEditorを使用し、コンボボックスを配置する。

セルに設定されたデータを、コンボボックス初期表示時に選択状態にして表示しようとしてるのですが、
パラメータが設定できなくて困ってます。

3.AdvancedDataGridの使用に関しての質問。

3-1.表のヘッダ部分のみをマウスでクリックで選択できないようにしたいのですが、方法がわかりません。。

3-2.DataGrid使用時のメモリリーク発生がAdvancedDataGridでも起こるのか。

Flex3でも起こる可能性があると聞いて、みなさんがどのように実装されているのかが知りたいです。
調べた内容によると:
データプロバイダを切り替えるロジックと、DataGridの水平スクロールバーを
右端にスクロールする操作が組み合わさった時に起こる現象ので、
FlashPlayerが使用しているメモリがGC(ガベージ・コレクション)されないことが原因のようです。

http://bugs.adobe.com/jira/browse/SDK-12339
に対処法?が掲載されているみたいなのですが、英語が読めません。

自分なりに色々調べてみたのですが、わからない事だらけで;
上記計4項目に関して、参考になるサイト、ソース記述等で、御教授願えたらと思っております。
よろしくお願いいたします。m(_ _)m

ソース:
ファイル名:TestGrid.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="com.acs.*">

<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.binding.utils.BindingUtils;
import mx.collections.ArrayCollection;
import mx.controls.Alert;

private var selectData:String="";
[Bindable]
public var dataList:Array=[
{col1:"A",col2:"dog",col3:"dog.bmp"},
{col1:"2",col2:"cat",col3:"cat.bmp"},
{col1:"3",col2:"dog",col3:"top.bmp"},
{col1:"-",col2:"cat",col3:"cup.bmp"}
];
public function setData(clmArray:Array):void {
var selectFile:String;
selectFile = clmArray[0].col3;
if(selectFile==null){
selectData="";
}else{
selectData = clmArray[0].col3;
}
}
public function callGrid():void {

Alert.show(selectData,"選択ファイル名");
}

]]>
</mx:Script>
<mx:Component id="cb1">
<ns1:ComboBoxEx fillAlphas="[1.0, 1.0]" fillColors="[#90A6FB, #EFEFEF, #94A4F4, #EFEFEF]" selectedData="cat">
<mx:Script>
<![CDATA[
[Bindable]
public var kindList:Array=[
{label:"dog",data:"dog"},
{label:"cat",data:"cat"},
{label:"cat",data:"1"},
{label:"dog",data:"2"}
];
]]>
</mx:Script>
<ns1:creationComplete>
<![CDATA[
dataProvider=kindList;
]]>
</ns1:creationComplete>
</ns1:ComboBoxEx>
</mx:Component>
<mx:Panel height="550" width="545">
<mx:Canvas height="500" width="500">
<mx:Button label="選択" x="442" y="271" click="callGrid()"/>

<mx:AdvancedDataGrid id="adg" x="10" y="107" width="480" dataProvider="{dataList}"
selectable="true" draggableColumns="false" resizableColumns="false"
sortableColumns="false" sortExpertMode="true" displayItemsExpanded="false"
displayDisclosureIcon="false" editable="true" change="setData(adg.selectedItems.reverse())">
<mx:groupedColumns>
<mx:AdvancedDataGridColumn headerText="No" dataField="col1" width="80" editorDataField="value">
<mx:itemEditor>
<mx:Component>
<mx:NumericStepper minimum="-10" maximum="10"/>
</mx:Component>
</mx:itemEditor>
</mx:AdvancedDataGridColumn>
<mx:AdvancedDataGridColumnGroup headerText="項目">
<mx:AdvancedDataGridColumn headerText="種別" itemEditor="{cb1}" dataField="col2" width="180" editorDataField="value"/>
<mx:AdvancedDataGridColumn headerText="ファイル名" dataField="col3" width="220"/>
</mx:AdvancedDataGridColumnGroup>
</mx:groupedColumns>

</mx:AdvancedDataGrid>
</mx:Canvas>
</mx:Panel>

</mx:Application>

ファイル名:ComboBoxEx.as
package com.acs
{
import mx.controls.ComboBox;
import mx.collections.ArrayCollection;

public class ComboBoxEx extends ComboBox
{
private var _dataField:String;


public function ComboBoxEx()
{
super();
_dataField = "data";
}


public function get dataField():String
{
return _dataField;
}


public function set dataField(value:String):void
{
_dataField = value;
}


public function set selectedData(value:String):void
{
if ((_dataField == "") || (_dataField == null ))
{
return;
}

var ac:ArrayCollection = this.dataProvider as ArrayCollection;

for (var iCnt:int=0 ; iCnt<ac.length ; iCnt++)
{
if(ac[iCnt][_dataField] == value){
this.selectedIndex = iCnt;
return;
}
}
}
}
}

neworder
投稿日時: 2008-6-11 15:58
ご主人様
登録日: 2007-7-14
居住地: 東京
投稿: 176
Re: AdvancedDataGrid使用にあたり
1.NumericStepper
いろいろ方法があると思いますが、NumericStepper を拡張するやり方を考えました。要件に合わないようでしたらすみません。
    <mx:NumericStepper minimum="-10" maximum="10">
        <mx:Script>
            <![CDATA[
                private var labelArray:Array = [ '-', ' ', 'A', 'B', 'C' ];
                override public function set data(value:Object):void
                {
                    super.data = value;
                    if (listData)
                    {
                        var n:int = labelArray.indexOf(listData.label);
                        if (n != -1)
                            this.value = n - 1;
                    }
                }
                public function get labelValue():String
                {
                    var result:String = labelArray[value + 1];
                    return result ? result : value.toString();
                }
            ]]>
        </mx:Script>
    </mx:NumericStepper>

2. ComboBox

creationComplete をやめて、ComboBoxEx のタグのところで以下のようにするといいと思います。
dataProvider="{kindList}" selectedData="{data.col2}"

3.1. ヘッダ部分マウス無効化

以下のやり方が確実かと思います。
    <mx:headerRenderer>
        <mx:Component>
            <mx:AdvancedDataGridHeaderRenderer mouseDown="event.stopPropagation()"/>
        </mx:Component>
    </mx:headerRenderer>

3.2.

リンクのページのコメントのところで workaround として示されているコードがありますが、
AdvancedDataGridBaseEx クラスの set columns メソッドでも同等と思われる考慮がなされているようなので、
大丈夫ではないかと思いますが、念のためプロファイラで確認するのが確実と思います。
yakiniku55
投稿日時: 2008-6-28 17:46
一見さん
登録日: 2008-6-8
居住地:
投稿: 2
Re: AdvancedDataGrid使用にあたり
ありがとうございます!!

無事に問題解決しました

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を