DataGrid の拡張 (2)

  include による部分ソース分割



ソースコードのダウンロード

実際このような使い方はしませんが、ステートメントの書けるところであれば使えるようです。

  
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:my="Controls.*">

<mx:Panel
	title="DataGrid の拡張"
	paddingTop="10"
	paddingBottom="10"
	paddingLeft="10"
	paddingRight="10"
>

	<my:LboxGrid id="grid"/>

	<mx:HBox>

	<mx:Button label="クリア" click="grid.Clear();"/>
	<mx:Button label="表示1" click="include 'Button1.as';"/>
	<mx:Button label="表示2" click="include 'Button2.as';"/>

	</mx:HBox>

</mx:Panel>

</mx:Application>
  

Button1.as
  
grid.AddRow(
	[
		'リテラル',
		grid.toString(),
		grid.className,
		grid.name,
		grid.id,
		grid.parent.toString()
	]
);
  

Button2.as
  
grid.AddRow(
	[
		this.className,
		'← this はアプリケーション',
		mx.core.Application.application.className,
		this.getChildren()[0].className,
		mx.core.UIComponent(grid.parent).className,
		grid.parentDocument.className
	]
);
  



  オブブシェクトの相対参照



App.mxml
  
<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
	xmlns:mx="http://www.adobe.com/2006/mxml"
	xmlns:my="Controls.*"
	xmlns:cur="*"
>

<mx:Panel
	title="DataGrid の拡張"
	paddingTop="10"
	paddingBottom="10"
	paddingLeft="10"
	paddingRight="10"
>

	<!-- *************************************************** -->
	<!-- 汎用型拡張 DataGrid -->
	<!-- *************************************************** -->
	<my:LboxGrid id="grid"/>

	<!-- *************************************************** -->
	<!-- 個別型拡張 ボタンセット -->
	<!-- *************************************************** -->
	<cur:App_btn/>

</mx:Panel>

</mx:Application>
  

App_btn.mxml
  
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml">

	<!-- *************************************************** -->
	<!-- LboxGrid の相対参照からメソッド呼び出し -->
	<!-- *************************************************** -->
	<mx:Button label="クリア" click="Object(this.parent).getChildren()[0].Clear();"/>

	<mx:Button label="表示1" click="include 'Button1.as';"/>
	<mx:Button label="表示2" click="include 'Button2.as';"/>

</mx:HBox>
  

Button1.as
  
// 拡張コントロールの参照
import Controls.*;
// ローカル変数に、相対位置表現のオブジェクトをセット
var grid:LboxGrid = Object(this.parent).getChildren()[0];
// 拡張コントロールのメソッド
grid.AddRow(
	[
		'リテラル',
		grid.toString(),
		grid.className,
		grid.name,
		grid.id,
		grid.parent.toString()
	]
);
  

Button2.as
  
// 拡張コントロールの参照
import Controls.*;
// ローカル変数に、相対位置表現のオブジェクトをセット
var grid:LboxGrid = Object(this.parent).getChildren()[0];
// 拡張コントロールのメソッド
grid.AddRow(
	[
		this.className,
		'← this はHBox',
		// 常にアプリケーションオブジェクト
		mx.core.Application.application.className,
		// HBox の最初の子オブジェクト
		this.getChildren()[0].className,
		Object(grid.parent).className,
		grid.parentDocument.className
	]
);
  



  id による絶対参照

ソースコードのダウンロード

カスタムコントロール化された処理ボタン部分を二重に定義して id による参照をテストします。
( カスタムコントロール内では id を定義しています )

  
<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
	xmlns:mx="http://www.adobe.com/2006/mxml"
	xmlns:my="Controls.*"
	xmlns:cur="*"
	initialize="initData();"
>

<mx:Script>
<![CDATA[

	// アプリケーションの初期化
	public function initData():void {

		btn.clear.label = "一段目のクリア";
		btn.disp1.label = "一段目の表示1";
		btn.disp2.label = "一段目の表示2";
		btn2.clear.label = "二段目のクリア";
		btn2.disp1.label = "二段目の表示1";
		btn2.disp2.label = "二段目の表示2";

		grid.AddRow(
			[
				btn.clear.label,
				btn.disp1.label,
				btn.disp2.label,
				btn2.clear.label,
				btn2.disp1.label,
				btn2.disp2.label
			]
);	}

]]>
</mx:Script>


<mx:Panel
	title="DataGrid の拡張"
	paddingTop="10"
	paddingBottom="10"
	paddingLeft="10"
	paddingRight="10"
>

	<!-- *************************************************** -->
	<!-- 汎用型拡張 DataGrid -->
	<!-- *************************************************** -->
	<my:LboxGrid id="grid"/>

	<!-- *************************************************** -->
	<!-- 個別型拡張 ボタンセット -->
	<!-- *************************************************** -->
	<cur:App_btn id="btn"/>

	<!-- *************************************************** -->
	<!-- 個別型拡張 ボタンセット2 -->
	<!-- *************************************************** -->
	<cur:App_btn id="btn2"/>

</mx:Panel>

</mx:Application>
  

App_btn.mxml
  
<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml">

	<!-- *************************************************** -->
	<!-- LboxGrid の相対参照からメソッド呼び出し -->
	<!-- *************************************************** -->
	<mx:Button
		id="clear"
		label="クリア"
		click="Object(this.parent).getChildren()[0].Clear();"
	/>

	<mx:Button id="disp1" label="表示1" click="include 'Button1.as';"/>
	<mx:Button id="disp2" label="表示2" click="include 'Button2.as';"/>

</mx:HBox>
  




  汎用型 AddRow と InsertRow の実装

ソースコードのダウンロード



  
<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
	xmlns:mx="http://www.adobe.com/2006/mxml"
	xmlns:my="Controls.*"
	xmlns:cur="*"
	initialize="initData();"
>

<mx:Script>
<![CDATA[

	// アプリケーションの初期化
	public function initData():void {

		grid.AddRow('1','******');
		grid.AddRow('2','******','******');
		grid.AddRow('3','******','******','******');
		grid.InsertRow(0,'0','******','******','******');
		grid.InsertRow(3,'3の前','******','******','******','******');
		grid.AddRowArray(new Array());
		grid.AddRowArray([]);
		grid.AddRow();
		grid.AddRowArray(['1','******']);

	}

]]>
</mx:Script>


<mx:Panel
	title="DataGrid の拡張"
	paddingTop="10"
	paddingBottom="10"
	paddingLeft="10"
	paddingRight="10"
>

	<!-- *************************************************** -->
	<!-- 汎用型拡張 DataGrid -->
	<!-- *************************************************** -->
	<my:LboxGrid id="grid"/>

	<!-- *************************************************** -->
	<!-- 個別型拡張 ボタンセット -->
	<!-- *************************************************** -->
	<cur:App_btn id="btn"/>

</mx:Panel>

</mx:Application>
  

M_Prop.as
  
// *************************************************
// 列数
// *************************************************
public function get count():int {

	return this.columns.length;

}
  

M_AddRow.as
  
// 初回( 行が存在しない )フラグ
private var init_flg:int = 1;
// カレント行( -1 は先頭行の前 )
private var cur_row:int = -1;

import mx.controls.*;
import mx.collections.*;

// *************************************************
// 配列を Object のプロパティにセット
// *************************************************
public function SetArrayToObject(obj:Object,arr:Array):void {

	if ( arr == null ) {
		arr = [];
	}

	// 配列の数
	var arrayMax:int = arr.length;
	// 列の数( M_Prop.as で定義 )
	var colMax:int = this.count;

	// obj( 行データ ) の プロパティに値をセット
	var i:int;
	for( i = 1; i <= colMax; i++ ) {
		if ( i > arrayMax ) {
			obj["COL" + i] = "";
		}
		else {
			obj["COL" + i] = arr[i-1];
		}
	}

}

// *************************************************
// 行追加
// 引数は配列
// *************************************************
public function AddRow(... cols):void {
	this.AddRowArray(cols)
}
public function AddRowArray(cols:Array=null):void {

	// 初回処理
	if ( this.init_flg == 1 ) {
		this.init_flg = 0;
		// dataProvider に実体をセット
		this.dataProvider = new ArrayCollection();
		// 先頭行を選択状態にする
		this.selectedIndex = 0;
	}

	// 行データをセットする Object を作成
	var obj:Object = new Object();

	// 配列を Object のプロパティにセット
	SetArrayToObject( obj, cols );

	// obj( 行データ )を追加
	this.dataProvider.addItem(obj);

	// 現在行の設定
	this.cur_row++;

}

// *************************************************
// 行挿入
// 引数は配列
// *************************************************
public function InsertRow(idx:int,... cols):void {
	this.InsertRowArray(cols,idx)
}
public function InsertRowArray(cols:Array=null,idx:int=0):void {

	// 初回処理
	if ( this.init_flg == 1 ) {
		this.init_flg = 0;
		// dataProvider に実体をセット
		this.dataProvider = new ArrayCollection();
		// 先頭行を選択状態にする
		this.selectedIndex = 0;
	}

	// 行データをセットする カーソル を作成
	var ivc:IViewCursor = this.dataProvider.createCursor();

	// 行データをセットする Object を作成
	var obj:Object = new Object();

	// 配列を Object のプロパティにセット
	SetArrayToObject( obj, cols );

	// obj( 行データ )を追加
	ivc.seek(CursorBookmark.FIRST,idx); 
	ivc.insert(obj);

	// 現在行の設定
	this.cur_row++;

}
  

... (rest) バラメータ
http://livedocs.adobe.com/flex/3_jp/html/03_Language_and_Syntax_19.html#155700











  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ