flex 中 给 grid 中的 每个 GridItem 添加单击事件
flex中给grid中的每个GridItem添加单击事件我想要实现单击单个GridItem然后使他变色,支持多选变色,请说下大概步骤,谢谢!!...
flex 中 给 grid 中的 每个 GridItem 添加单击事件
我想要实现 单击单个GridItem然后使他变色,支持多选变色,请说下大概步骤,谢谢!! 展开
我想要实现 单击单个GridItem然后使他变色,支持多选变色,请说下大概步骤,谢谢!! 展开
4个回答
展开全部
估计你要自己重写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();
}
}
}
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();
}
}
}
TableDI
2024-07-18 广告
2024-07-18 广告
要将两个表格中的数据进行匹配,首先确定两个表格中都存在的共同字段,如ID、姓名或特定标识符。接着,使用数据处理工具(如Excel、SQL或Python的pandas库)来执行匹配操作。在Excel中,可以通过VLOOKUP函数或数据透视表来...
点击进入详情页
本回答由TableDI提供
展开全部
楼主可以看看dataGrid的api呀,api最下面有示例,你要的这个功能在它的example里面就有。还不行你就Q我。1484634000
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
datagrid不支持。此做法。
可以看一下开源的table 一类的。
可以看一下开源的table 一类的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
支持多选,楼主的意思是,可以选中多个单元格?不是选中多行吧
追问
是选中多个单元格,不是多行,请问怎么实现呢?大概步骤请说一下
追答
选中多个单元格,有点悬。没实现过这种
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询