关于Flex的DataGrid的应用拓展(一)

Flex的DataGrid是Flex软件开发过程中最重要的组件之一,但这个组件确实让大家既爱又恨。这个组件的代码非常多,要是连继承类算起来,总么也要上万行代码。因此,分享一些在工作中的一些小用途希望大家能喜欢。首先介绍一下如何设置header的的rollover颜色。在DataGrid中不能单独设置header的rollover颜色,只能设置一个和数据统一的rollover颜色。步骤如下:

(1)创建一个DataGrid继承类:
package
{
import mx.controls.DataGrid;
import mx.core.mx_internal;

use namespace mx_internal;
/**
* The color of the header background when the user rolls over the row.
*
* The default value for the Halo theme is <code>0xB2E1FF</code>.
* The default value for the Spark theme is <code>0xCEDBEF</code>.
*
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
[Style(name="headerRollOverColor", type="uint", format="Color", inherit="yes")]

public class headerDatagrid extends DataGrid
{
public function headerDatagrid()
{
super();
headerClass=customDataGridHeader;
}

}
}


注:这个继承类干了两件事情。1)指定一个样式 ;2)指定一个Header实现类用于覆盖原来的Header,下一步会介绍。



2)继承DatagridHeader实现对Header rollOver的指定:
package
{
import flash.display.Graphics;
import flash.display.Sprite;
import flash.events.MouseEvent;

import mx.controls.dataGridClasses.DataGridColumn;
import mx.controls.dataGridClasses.DataGridHeader;
import mx.controls.listClasses.IListItemRenderer;

public class customDataGridHeader extends DataGridHeader
{

public function customDataGridHeader()
{
super();
}

/**
* override current style drawing,perpose: create new style for header's rollover.
*/
override protected function drawHeaderIndicator(indicator:Sprite, x:Number, y:Number, width:Number, height:Number, color:uint, itemRenderer:IListItemRenderer):void
{
var g:Graphics = indicator.graphics;
g.clear();
if(color==getStyle("rollOverColor")&&getStyle("headerRollOverColor")){
color=getStyle("headerRollOverColor");
}
g.beginFill(color);
g.drawRect(0, 0, width, height);
g.endFill();
indicator.x = x;
indicator.y = y;
}
}
}



3)调用这个实现了header rollover 的实现类:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:local="*">
<s:layout>
<s:BasicLayout/>
</s:layout>
<fx:Declarations>
</fx:Declarations>
<fx:Style>
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";
@namespace local "*";
mx|DataGrid{
headerRollOverColor:#ff0000;
}


</fx:Style>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;

[Bindable]
public var collection:ArrayCollection = new ArrayCollection([
{ "name1" : "上海", "selected":false},
{ "name1":"黄浦", "selected":false },
{ "name1":"浦东", "selected":true },
{ "name1":"静安", "selected":false },
{ "name1":"徐汇", "selected":false },
{ "name1":"北京", "selected":false},
{ "name1":"海淀", "selected":false },
{ "name1":"朝阳", "selected":true },
{ "name1":"丰台", "selected":false } ]);
]]>
</fx:Script>
<local:headerDatagrid width="300" id="datagrid" dataProvider="{collection}" >
<local:columns>
<mx:DataGridColumn headerText="地区" dataField="name1" itemRenderer="datagridItemrender" >
</mx:DataGridColumn>
<mx:DataGridColumn headerText="选择" dataField="selected">
</mx:DataGridColumn>
</local:columns>

</local:headerDatagrid>
</s:Application>


注:这几个类别的应用都在Flex4.1中运行过,效果不错。另外,如果想知道为什么这样,那就多去读源码吧。这里不再熬述。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值