flex 中 给 grid 中的 每个 GridItem 添加单击事件

flex中给grid中的每个GridItem添加单击事件我想要实现单击单个GridItem然后使他变色,支持多选变色,请说下大概步骤,谢谢!!... flex 中 给 grid 中的 每个 GridItem 添加单击事件
我想要实现 单击单个GridItem然后使他变色,支持多选变色,请说下大概步骤,谢谢!!
展开
 我来答
zju2004
2011-06-24 · 超过16用户采纳过TA的回答
知道答主
回答量:58
采纳率:0%
帮助的人:45.5万
展开全部
估计你要自己重写grid了。下面是以前写的设置标题行背景色不同(headerBackgroundSkin)。看下是不是可以改下,计算出当前点击的单元格的位置和大小,然后填充,如果成功能希望能共享下源码,到时候联系我,谢谢。
package com.component.HeaderStyleDataGrid
{
import flash.display.GradientType;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Matrix;

import mx.controls.DataGrid;
import mx.controls.dataGridClasses.DataGridColumn;
import mx.controls.dataGridClasses.DataGridHeader;
import mx.controls.listClasses.IListItemRenderer;
import mx.core.mx_internal;
import mx.skins.halo.DataGridHeaderBackgroundSkin;
import mx.styles.StyleManager;
import mx.utils.UIDUtil;
use namespace mx_internal;

public class CustomDataGridHeaderBackgroundSkin extends DataGridHeaderBackgroundSkin
{
public function CustomDataGridHeaderBackgroundSkin()
{
super();
}

private var columnBackgroundMap:Object = new Object();

override protected function updateDisplayList(w:Number, h:Number):void
{
super.updateDisplayList(w,h);

if(w == 0)
return;

var dataGridHeader:DataGridHeader = DataGridHeader(parent.parent);
var dataGrid:DataGrid = DataGrid(dataGridHeader.owner);
var visibleColumns:Array = dataGrid.getAllVisibleColumns();
var headerItems:Array = dataGridHeader.rendererArray;

for each(var column:DataGridColumn in visibleColumns)
{
var colors:Array = column.getStyle("headerColors");
var headerItem:IListItemRenderer = headerItems[column.colNum]
var x:Number = headerItem.x;
w = column.width;

var uid:String = UIDUtil.getUID(column);
var sprite:Sprite = columnBackgroundMap[uid];
if(sprite == null)
{
sprite = new Sprite();
parent.addChild(sprite);
columnBackgroundMap[uid] = sprite;
}
sprite.x = x;

if(colors != null)
{
var g:Graphics = sprite.graphics;
g.clear();
var matrix:Matrix = new Matrix();
matrix.createGradientBox(w, h + 1, Math.PI/2, 0, 0);

StyleManager.getColorNames(colors);
colors = [ colors[0], colors[0], colors[1] ];
var ratios:Array = [ 0, 60, 255 ];
var alphas:Array = [ 1.0, 1.0, 1.0 ];

g.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, matrix);
g.lineStyle(0, 0x000000, 0);
g.moveTo(0, 0);
g.lineTo(w, 0);
g.lineTo(w, h - 0.5);
g.lineStyle(0, getStyle("borderColor"), 100);
g.lineTo(0, h - 0.5);
g.lineStyle(0, 0x000000, 0);
g.endFill();
}

column.addEventListener("widthChanged",columnWidthChangedHandler);
}
}

private function columnWidthChangedHandler(event:Event):void
{
invalidateDisplayList();
}
}
}
花贝你嚏中力385
2011-07-02 · TA获得超过7.7万个赞
知道大有可为答主
回答量:5.8万
采纳率:0%
帮助的人:8355万
展开全部
楼主可以看看dataGrid的api呀,api最下面有示例,你要的这个功能在它的example里面就有。还不行你就Q我。1484634000
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
助人学习资料站
2011-06-21 · 超过31用户采纳过TA的回答
知道答主
回答量:99
采纳率:0%
帮助的人:51.8万
展开全部
datagrid不支持。此做法。
可以看一下开源的table 一类的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huang2jing
2011-06-21 · TA获得超过280个赞
知道小有建树答主
回答量:407
采纳率:0%
帮助的人:289万
展开全部
支持多选,楼主的意思是,可以选中多个单元格?不是选中多行吧
追问
是选中多个单元格,不是多行,请问怎么实现呢?大概步骤请说一下
追答
选中多个单元格,有点悬。没实现过这种
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式