您好我想问是否有可能在一列中包含字符串和单选按钮,具体取决于另一列的值
|column1 | column 2 |
|r | radiobutton|
|s | string |
如果column2中的第1列中的r应该显示为radiobutton,否则第2列只显示一个字符串。
感谢您的回答
塞巴斯蒂安
答案 0 :(得分:1)
您需要编写自己的itemRenderer。
从高级别开始,您需要做的是告诉列您将按行呈现列。然后,每行 - 你检查你需要的条件(比如查看不同的列或其他)并采取你想要的动作(比如添加单选按钮和其他组件)。
在数据栏中执行以下操作:
<mx:DataGridColumn id="yourColumn"
headerText="Cool Column" editable="false" itemRenderer="SpecialCanvas"/>
然后在名为'SpecialCanvas'的组件中(假设他扩展了画布),您可以根据需要设置事件或覆盖方法...例如:
override protected function initializationComplete():void
{
// check for the conditional that you want and add the component that
// you need to this canvas or what not.
}
答案 1 :(得分:1)
您需要编写项目渲染器才能执行此操作。但是,只要设置了“data”属性,就要更新渲染的状态。这很重要,因为项目渲染器可以回收利用。基本上,只要该渲染器的数据发生更改,就会设置data属性,并在滚动DataGrid时发生这种情况。
这是一个使用DataGrid的简单应用程序:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete()">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable] private var collection:ArrayCollection;
private function onCreationComplete():void
{
collection = new ArrayCollection();
for (var i:uint = 0; i < 20; i++)
collection.addItem({name:'Person #'+i});
}
]]>
</mx:Script>
<mx:DataGrid width="600" dataProvider="{collection}" rowCount="5">
<mx:columns>
<mx:DataGridColumn itemRenderer="com.foo.ItemRenderer"/>
</mx:columns>
</mx:DataGrid>
</mx:Application>
一个简单的基于MXML的渲染器:
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
override public function set data(value:Object):void
{
super.data = value;
// only show radio buttons if the "name" property of the data contains "5"; otherwise show a label
radioS.visible = radioS.includeInLayout = radioM.visible = radioM.includeInLayout = radioL.visible = radioL.includeInLayout = data.name.indexOf(5) > -1;
labelName.visible = labelName.includeInLayout = data.name.indexOf(5) < 0;
}
]]>
</mx:Script>
<mx:Label id="labelName" text="{data.name}"/>
<mx:RadioButton id="radioS" label="Small" groupName="radioGroup"/>
<mx:RadioButton id="radioM" label="Medium" groupName="radioGroup"/>
<mx:RadioButton id="radioL" label="Large" groupName="radioGroup"/>
</mx:HBox>