我有一个自定义的 AdvancedDataGrid,我们使用alternatingItemColors 属性,它为AdvancedDataGrid 的行显示两种不同的颜色。现在有时数据网格有 15 行,但只有 5 行有数据,我们只希望前 5 行显示交替颜色,其余行应该只显示一种颜色。过去有没有人这样做过,如果有人可以请解释如何做到这一点,将不胜感激。
提前致谢。
我有一个自定义的 AdvancedDataGrid,我们使用alternatingItemColors 属性,它为AdvancedDataGrid 的行显示两种不同的颜色。现在有时数据网格有 15 行,但只有 5 行有数据,我们只希望前 5 行显示交替颜色,其余行应该只显示一种颜色。过去有没有人这样做过,如果有人可以请解释如何做到这一点,将不胜感激。
提前致谢。
您必须覆盖 Datagrid 并覆盖 drawRowBackground 方法,如果 rowInd 大于行数,则设置默认颜色。请参阅下面提到的代码片段 -
公共类 CustomDataGrid 扩展 AdvancedDataGrid {
protected override function drawRowBackground(s:Sprite, rowIndex:int, y:Number, height:Number, color:uint, dataIndex:int):void{
var XMLdata:XML=rowNumberToData(dataIndex) as XML;
if(XMLdata!=null){
if(XMLdata.attribute(Constants.col) != undefined && XMLdata.attribute(Constants.col) != ""){
color=XMLdata.attribute(Constants.col);
}else{
color=0xFFFFFF;
}
}
super.drawRowBackground(s,rowIndex,y,height,color,dataIndex);
}
}
当您的行数少于允许的高度时,将 rowCount 设置为实际行数,或者覆盖 drawRowBackground。
尝试为您的 ADG 使用项目渲染器:-
<?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:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.FlexEvent;
[Bindable]
private var dpHierarchy:ArrayCollection= new ArrayCollection([
{name:"A", region: "Arizona"},
{name:"B", region: "Arizona"},
{name:"C", region: "California"},
{name:"D", region: "California"}
]);
]]>
</fx:Script>
<mx:AdvancedDataGrid id="myADG"
width="500" height="500"
paddingBottom="0" paddingLeft="0" paddingRight="0" paddingTop="0"
dataProvider="{dpHierarchy}"
itemRenderer="DrawAlternateRowColor">
<mx:columns>
<mx:AdvancedDataGridColumn dataField="name" headerText="Name" />
<mx:AdvancedDataGridColumn dataField="region" headerText="Region" />
</mx:columns>
</mx:AdvancedDataGrid>
</s:Application>
//ItemRenderer name: - DrawAlternateRowColor -- 您可以使用与 CADG 相同的概念。
<?xml version="1.0" encoding="utf-8"?>
<s:MXAdvancedDataGridItemRenderer 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" alternatingItemColors="[#0000FF, #FF0000]"
width="100%" height="100%">
<s:Label id="lblData" verticalAlign="middle" text="{listData.label}" />
</s:MXAdvancedDataGridItemRenderer>