Flex-DataGridを設定し、行のスタイルを選択します.
この例では、ユーザがカスタマイズしたitem renderを使用して、DataGridの中の行を選択するスタイルをどのように設定するかを示します.この例を見てください.
まず基本的な界面構造を構築します.一つはいくつかの列のDataGridだけです.
コードダウンロード:http://www.switchonthecode.com/sites/default/files/244/source/SOTC-DataGridSelectedRow.zip
Original Paper:http://www.switchonthecode.com/tutorials/flex-datagrid-selected-row-styling
まず基本的な界面構造を構築します.一つはいくつかの列のDataGridだけです.
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" width="300" height="125">
<mx:DataGrid width="100%" height="100%">
<mx:columns>
<mx:DataGridColumn headerText="First Name" dataField="firstName"/>
<mx:DataGridColumn headerText="Last Name" dataField="lastName"/>
<mx:DataGridColumn headerText="Age" dataField="age"/>
<mx:DataGridColumn headerText="Sex" dataField="sex"/>
</mx:columns>
</mx:DataGrid>
</mx:Application>
その後、いくつかの初期データをDataGridに導入します.ここでは、プログラムローディング初期化時に、creationCompleet関数が実行されるときに、私たちがデータを導入する関数initを呼び出します.<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
width="300" height="125" creationComplete="init()">
これらの変数はgrid中のdatafieldに対応する変数をいくつか追加した.具体的には以下の通りです<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
private var peeps:ArrayCollection;
private function init():void
{
peeps = new ArrayCollection();
peeps.addItem({firstName: "Handsome", lastName: "Dude", age: 24, sex: "male"});
peeps.addItem({firstName: "Red", lastName: "Bloke", age: 25, sex: "male"});
peeps.addItem({firstName: "Tall", lastName: "Guy", age: 25, sex: "male"});
peeps.addItem({firstName: "Cute", lastName: "Girl", age: 24, sex: "female"});
peeps.addItem({firstName: "Hot", lastName: "Chick", age: 24, sex: "female"});
peeps.addItem({firstName: "Lazy", lastName: "Man", age: 25, sex: "male"});
}
]]>
</mx:Script>
これらのデータを実際にgridにするには、DataGridのdata Provider属性をこのデータソースに向ける必要があります.<mx:DataGrid dataProvider="{peeps}" width="100%" height="100%">
一番面白い部分は、私たちがある行を選択した時に、カスタムのitemRenderを作成します.ここで作成するカスタムコンポーネントはLabelです.このLabelを利用できるようにするには、Labelのset data関数を書き換えなければなりません.Labelのtext内容をあるdata Fieldの属性値に設定します.私たちのレンダーのlistData属性からdata Field属性名を取得します.カスタムのRendererは以下の通りです.<?xml version="1.0" encoding="utf-8"?>
<mx:Label xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%" height="100%">
<mx:Script>
<![CDATA[
import mx.controls.dataGridClasses.DataGridListData;
override public function set data(value:Object):void
{
super.data = value;
if(value)
{
var dglistData:DataGridListData = listData as DataGridListData;
if(value[dglistData.dataField])
this.text = value[dglistData.dataField];
}
}
]]>
</mx:Script>
</mx:Label>
ここで作ったのは安いitem Rendererだけです.このRendererが私達が選んだ行かどうかを確認するには、このRendererのDataがData Gridの中で選択された行のデータに対応しているかを確認しなければなりません.そのために、私たちはinitにDataGrid事件の傍受を設置しました.以下は全てのCusstomRender.mxmlです.<?xml version="1.0" encoding="utf-8"?>
<mx:Label xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%" height="100%" creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.events.ListEvent;
import mx.controls.DataGrid;
import mx.controls.dataGridClasses.DataGridListData;
private var dg:DataGrid;
private function init():void
{
dg = listData.owner as DataGrid;
dg.addEventListener(ListEvent.CHANGE, updateSelected);
}
override public function set data(value:Object):void
{
super.data = value;
if(value)
{
var dglistData:DataGridListData = listData as DataGridListData;
if(value[dglistData.dataField])
this.text = value[dglistData.dataField];
updateSelected();
}
}
private function updateSelected(e:Event = null):void
{
if(!data || !dg)
return;
if(dg.selectedItem == data)
{
//This row is selected update stuff
setStyle("fontWeight", "bold");
}
else
{
//This row is not selected reset stuff
setStyle("fontWeight", "normal");
}
}
]]>
</mx:Script>
</mx:Label>
まず、DataGridの変数dgを追加しました.inti関数では、先に述べたlistDataを使って、gird変数がこのrenderのownerに等しいように設定しました.そしてイベントを追加して、イベントを選択し、udateSelected関数を呼び出すことができます.この関数はこの行をチェックし、表示のスタイルを更新します.もちろん、他の行が選択されると、現在の選択行のスタイルも変更されなければなりません.すなわち、初期の状態に戻ります.コードダウンロード:http://www.switchonthecode.com/sites/default/files/244/source/SOTC-DataGridSelectedRow.zip
Original Paper:http://www.switchonthecode.com/tutorials/flex-datagrid-selected-row-styling