Apache flex 更改Datagrid中的背景颜色单元格(Flex 4.6)
我试图为数据网格中的每个单元格在两种背景色之间切换。双击特定单元格时,它会更改其状态 我想要的是,用户能够在数据网格中选择单个单元格,因此FFFFFF颜色用于未选择的单元格,CDCDCD用于选定的单元格 我有以下ItenRenderer代码:Apache flex 更改Datagrid中的背景颜色单元格(Flex 4.6),apache-flex,datagrid,flex4,flexbuilder,Apache Flex,Datagrid,Flex4,Flexbuilder,我试图为数据网格中的每个单元格在两种背景色之间切换。双击特定单元格时,它会更改其状态 我想要的是,用户能够在数据网格中选择单个单元格,因此FFFFFF颜色用于未选择的单元格,CDCDCD用于选定的单元格 我有以下ItenRenderer代码: <?xml version="1.0" encoding="utf-8"?> <s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
clipAndEnableScrolling="true">
<fx:Script>
<![CDATA[
override public function prepare(hasBeenRecycled:Boolean):void {
//lblData.text = data[column.dataField]
}
]]>
</fx:Script>
<s:states>
<s:State name="normal"/>
<s:State name="selected"/>
</s:states>
<s:Label id="lblData" top="9" left="7" text="10" width="100%" height="100%" textAlign="center"/>
<s:Rect width="100%" height="100%">
<s:fill>
<s:SolidColor color.selected="#CDCDCD" color.normal="#FFFFFF"/>
</s:fill>
</s:Rect>
</s:GridItemRenderer>
问题是,由于rect组件将标签隐藏,所以标签永远不会显示。我怎样才能做到这一点
提前感谢。试试这个:
//应用
<?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">
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]private var initDG:ArrayCollection = new ArrayCollection([
{Artist:'01', Album:'Album 01', Year:'2008'},
{Artist:'02', Album:'Album 02', Year:'2009'},
{Artist:'03', Album:'Album 03', Year:'2007'},
{Artist:'04', Album:'Album 04', Year:'2003'},
]);
]]>
</fx:Script>
<s:VGroup>
<s:DataGrid id="myGrid" width="360" dataProvider="{initDG}">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="Artist" headerText="Artist" itemRenderer="com.dgcoloredcells.CellRenderer"/>
<s:GridColumn dataField="Album" headerText="Album" itemRenderer="com.dgcoloredcells.CellRenderer"/>
<s:GridColumn dataField="Year" headerText="Year" itemRenderer="com.dgcoloredcells.CellRenderer"/>
</s:ArrayList>
</s:columns>
</s:DataGrid>
</s:VGroup>
</s:Application>
//渲染器
<?xml version="1.0" encoding="utf-8"?>
<s:GridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
implements="mx.controls.listClasses.IDropInListItemRenderer">
<fx:Script>
<![CDATA[
import mx.controls.dataGridClasses.DataGridListData;
import mx.controls.listClasses.BaseListData;
private var _listData:BaseListData;
[Bindable]private var isSelected:Boolean = false;
override public function set data( value:Object ) : void
{
super.data = value;
lblData.text = data[column.dataField];
}
[Bindable]public function get listData() : BaseListData
{
return _listData;
}
public function set listData( value:BaseListData ) : void
{
_listData = value;
}
private function onClick(evt:Event):void
{
isSelected = !isSelected;
}
]]>
</fx:Script>
<s:Rect width="100%" height="100%">
<s:fill>
<s:SolidColor color="{isSelected ? 0xCDCDCD : 0xFFFFFF}"/>
</s:fill>
</s:Rect>
<s:Label id="lblData" top="9" left="7" width="100%" height="100%" textAlign="center" doubleClickEnabled="true" doubleClick="onClick(event)"/>
</s:GridItemRenderer>
//编辑
在这里,您可以看到我的数据[column.dataField]问题截图:
这是相应的值对象
那么data[column.dataField]=data[Artist]=01您希望如何定位文本?也许您需要某种布局?文本中心在垂直和水平位置对齐,并将标签文本链接到网格单元格中的数据。因此您希望文本位于彩色矩形的顶部?我的目标是能够选择单个单元格。因此,当再次选中时,单元格将其背景色更改为浅灰色。现在我可以在背景上显示文本了,试着将它们都添加到a中,并颠倒和Hi Anton的顺序,您使用的是哪个Flex SDK版本?该代码在lblData.text=data[column.dataField]行中引发错误;指示空对象。有什么问题吗?我有4.6.Hi,我使用flashbuilder4.6,sdk4.6.0。尝试通过调试来诊断问题。您在column.dataField中看到了什么?我现在将在我的答案中发布一个截图。我已经不能发布图片了。我刚刚上传了一张图片到我的服务器:你能把你的项目文件从我的个人资料发送到电子邮件地址吗?或者在服务器上发布两个mxml的屏幕截图。奇怪的是,listData=Null对于我来说,在没有所有ValueObject的情况下检查流程是非常复杂的。我会做两件事。首先,我会尝试用我的两个文件创建一个项目。所以我们可以看看是sdk问题还是代码错误。其次,我将尝试看看您的数据是否可以在没有渲染器的正常数据网格中显示。您应该将implements=mx.controls.listClasses.IDropInListItemRenderer添加到渲染器头部。