<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2010/04/03/creating-a-multiline-spark-checkbox-control-in-flex-4/ -->
<s:Application name="Spark_CheckBox_skin_maxDisplayedLines_test"
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:datagrid="datagrid.*">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
private var griddata : ArrayCollection = new ArrayCollection(
[ {name:"每月支出",order:1, status:"启用", selected:true,imgUrl:"favorites.png", startTime:"2010-12-01",stopTime:"2010-12-01",description:"没有描述"},
{name:"每月支出",order:2, status:"禁用", selected:false,imgUrl:"favorites.png", startTime:"2010-12-01",stopTime:"2010-12-01",description:"没有描述"}
]
);
protected function ch_clickHandler(event:MouseEvent):void
{
for each(var o : Object in _dataGrid.dataProvider)
{
o["selected"] = ch.selected;
}
_dataGrid.invalidateList();
}
]]>
</fx:Script>
<s:VGroup>
<s:CheckBox id="ch" click="ch_clickHandler(event)"
skinClass="skins.CustomCheckBoxSkin"
width="200"
/>
<mx:DataGrid id="_dataGrid" allowDragSelection="true" allowMultipleSelection="true" dataProvider="{griddata}"
width="80%" height="100%" resizableColumns="true" dragEnabled="true" dropEnabled="true"
>
<mx:columns>
<datagrid:CheckBoxHeaderColumn id="dataheader" headerText="选择"
dataField="selected"/>
<mx:DataGridColumn headerText="名称" dataField="name" />
<mx:DataGridColumn headerText="简称" dataField="simpleName" />
<mx:DataGridColumn headerText="状态" dataField="status" />
<mx:DataGridColumn headerText="启用时间" dataField="startTime" />
<mx:DataGridColumn headerText="停用时间" dataField="stopTime" />
<mx:DataGridColumn headerText="描述" dataField="description" />
</mx:columns>
</mx:DataGrid>
</s:VGroup>
</s:Application>
package datagrid
{
import mx.controls.dataGridClasses.DataGridColumn;
import mx.core.ClassFactory;
[Event(name="click", type="flash.events.MouseEvent")]
public class CheckBoxHeaderColumn extends DataGridColumn
{
public function CheckBoxHeaderColumn(columnName:String=null)
{
super(columnName);
// headerRenderer = new ClassFactory(CheckBoxHeaderRenderer);
// itemRenderer = new ClassFactory(CheckBoxItemRenderer);
itemRenderer = new ClassFactory(CheckBoxImageItemRenderer);
headerRenderer = new ClassFactory(CheckBoxImageHeaderRenderer);
}
/**is the checkbox selected**/
public var selected:Boolean = false;
}
}
CheckBoxImageHeaderRenderer
<?xml version="1.0" encoding="utf-8"?>
<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
focusEnabled="true" creationComplete="mxdatagriditemrenderer1_creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
import mx.controls.DataGrid;
import mx.events.FlexEvent;
private var column:CheckBoxHeaderColumn;
private var dg:DataGrid;
protected function check_clickHandler(event:MouseEvent):void
{
if (listData)
{
dg = DataGrid(listData.owner);
for each(var o : Object in dg.dataProvider)
{
o[column.dataField] = check.selected ;
}
dg.invalidateList();
}
}
protected function mxdatagriditemrenderer1_creationCompleteHandler(event:FlexEvent):void
{
dg = DataGrid(listData.owner);
column = dg.columns[listData.columnIndex];
column.addEventListener("click", clickHandler);
}
protected function clickHandler(event:MouseEvent):void
{
var b1 : Boolean = false;
var b2 : Boolean = false;
for each(var o : Object in dg.dataProvider)
{
if(o[column.dataField])
{
b1 = true;
}
else
{
b2 = true;
}
}
if(b1 && !b2)
{
check.selected = true;
}else{
check.selected = false;
}
}
]]>
</fx:Script>
<s:HGroup horizontalCenter="0">
<s:CheckBox id="check" click="check_clickHandler(event)"/>
<s:Label id="lblData" top="0" left="0" right="0" bottom="0" text="{dataGridListData.label}" />
</s:HGroup>
</s:MXDataGridItemRenderer>
CheckBoxImageItemRenderer:
<?xml version="1.0" encoding="utf-8"?>
<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
focusEnabled="true">
<fx:Script>
<![CDATA[
import mx.controls.DataGrid;
private var column:CheckBoxHeaderColumn;
protected function checkbox1_clickHandler(event:MouseEvent):void
{
data[column.dataField]= check.selected;
column.dispatchEvent(event);
}
override public function set data(value:Object):void
{
super.data = value;
if (listData)
{
var dg:DataGrid = DataGrid(listData.owner);
column = dg.columns[listData.columnIndex];
check.selected = data[column.dataField];
if(img){
img.source = data["imgUrl"];
}
}
}
]]>
</fx:Script>
<s:HGroup horizontalCenter="0">
<s:CheckBox id="check" click="checkbox1_clickHandler(event)"/>
<mx:Image id="img" />
</s:HGroup>
<!--<s:Label id="lblData" top="0" left="0" right="0" bottom="0" text="{dataGridListData.label}" />-->
</s:MXDataGridItemRenderer>