DataGrid のカラムにコントロールを定義する

  リンクボタンで URL を開く



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

DataGridColumn の itemRenderer にクラス(カスタムコントロール)をセットする事によって、
行が追加される毎にその位置にインスタンスを作成してそのコントロールを実装できます


以下は、リンク用ボタンの定義です

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

	<mx:LinkButton
		label="{data.COL2}"
		click="mx.core.Application.application.OpenUrl(data.COL4);"
	/>

</mx:HBox>
  



  App.mxml



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

<mx:Script>
<![CDATA[

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

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

		// 列をクリア
		grid.Reset();

		// ヘッダタイトルを表示しない
		grid.ShowHeader(false);

		// 高さを設定
		grid.width = 500;
		grid.height = 350;

		// 列を追加
		grid.AddColumn("更新日");
		grid.AddColumn("タイトル",350);
		grid.AddColumn("カテゴリ",150);
		grid.AddColumn("URL");

		// URL カラムを非表示にする
		grid.SetColumnHide(3);

		// タイトルカラムにコントロールを定義
		grid.SetColumnControl(1, winofsql.Controls.LboxGridButton);

		// データをセット
		grid.AddRow(
			"2008/01/01",
			"Google",
			"リンク",
			"http://www.google.co.jp/");
		grid.AddRow(
			"2008/01/02",
			"Yahoo",
			"リンク",
			"http://www.yahoo.co.jp/");
		grid.AddRow(
			"2008/01/03",
			"Microsoft",
			"リンク",
			"http://www.microsoft.com/ja/jp/default.aspx");

		// 選択カーソルで選択しない
		grid.Unselect();	

	}

	public function OpenUrl(url:String):void {
		var req:URLRequest = new URLRequest(url);
		navigateToURL(req, "_blank");
	}

]]>
</mx:Script>

<mx:Panel
	id="panel"
	title="Grid"
>

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

</mx:Panel>

</mx:Application>
  



  LboxGrid.mxml

App.mxml ではいったん Grid をリセットするので、このカラム定義は使用されませんが、
最初からコントロールを実装する例です

  
<?xml version="1.0" encoding="utf-8"?>
<mx:DataGrid height="400" xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script source="M_AddRow.as"/>
<mx:Script source="M_Clear.as"/>
<mx:Script source="M_Column.as"/>
<mx:Script source="M_Prop.as"/>

	<!-- *************************************************** -->
	<!-- デフォルト列定義 -->
	<!-- *************************************************** -->
	<mx:columns>
		<mx:DataGridColumn headerText="項目1" dataField="COL1" width="100">
			<mx:itemRenderer>
				<mx:Component>
					<mx:VBox>
						<mx:Button label="更新"/>
					</mx:VBox>
				</mx:Component>
			</mx:itemRenderer>
		</mx:DataGridColumn>

		<mx:DataGridColumn headerText="項目2" dataField="COL2" width="100"/>
		<mx:DataGridColumn headerText="項目3" dataField="COL3" width="100"/>
		<mx:DataGridColumn headerText="項目4" dataField="COL4" width="100"/>
		<mx:DataGridColumn headerText="項目5" dataField="COL5" width="100"/>
		<mx:DataGridColumn headerText="項目6" dataField="COL6" width="100"/>
	</mx:columns>

</mx:DataGrid>
  



  SetColumnControl メソッド

  
// *************************************************
// カラムにコントロールを定義
// *************************************************
public function SetColumnControl(idx:int,value:Class):void {

	var ar:Array = this.columns;
	ar[idx].itemRenderer = new ClassFactory(value);
	this.columns = ar;

}
  










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





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

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ