(编辑:请参阅下面提供的我的答案作为可能的解决方案)
我有一个数据网格,其中每个数据网格列都使用不同的 itemrenderer。其中一列中的这些渲染器之一是一个充满值的 List 组件。列表组件中显示的文本是其数据提供者的标签。
我想要做的是使 List 组件列 itemrenderer 成为 itemeditor。这意味着用户单击列中的单元格并显示值列表(不是下拉列表)。然后,他们可以从列表组件中选择多个值。当他们从列表组件中单击时,该列会显示选择的值。
当他们保存他们的选择时(通过相关数据网格之外的保存按钮),我想参考该数据以确定他们做出了什么选择 - 但是 - 而不是标签,我想获得与那个相关的数字标签。我用 XML 做到这一点:
<colors>
<color label="Green" value="1"/>
<color label="Yellow" value="2"/>
<color label="Red" value="3"/>
</colors>
现在,itemeditor 部分非常棒,因为它可以在您单击单元格外部后直观地查看您的选择。但是,我想确定所选颜色(“3”)的值,并为此列表中选择的每个值执行此操作。
这应该通过以下 datagridcolumn (CheckList 只是一个允许在不按住 CTRL 键的情况下进行多项选择的列表)使用该列的给定数据提供程序自然识别:
<colorData chosenColors=''/>
这是示例代码:
<mx:DataGridColumn dataField="@chosenColors" editorDataField="colors" headerText="Colors" width="200" wordWrap="true">
<mx:itemEditor>
<fx:Component>
<s:MXDataGridItemRenderer focusEnabled="true" height="22" >
<fx:Script>
<![CDATA[
public function get colors():String {
var str:String = new String;
for(var i:int=0;i < colorList.selectedItems.length; i++){
if(i > 0){
str += ",\n";
}
str += colorList.selectedItems[i].@label;
}
return str;
}
]]>
</fx:Script>
<r:CheckList id="colorList"
dataProvider="{parentApplication.colors}"
labelField="@label" width="100%" height="150"/>
</s:MXDataGridItemRenderer>
</fx:Component>
</mx:itemEditor>
</mx:DataGridColumn>
但是,如果选择了 Green 和 Red,则这只是将 XML 替换为以下内容:
<colorData chosenColors=' Green, Red'/>
相反,我希望生成的 XML 是:
<colorData chosenColors=' 1, 3'/>
请让我知道如何实现这一点 - 内联渲染器与否,其他实现等。感谢您的帮助!