Apache flex 如何在FlexDataGrid中显示DropDownList组件?
我对flex很陌生。我已经成功地在我的dataGrid表中添加了dropDownList。dropDownList运行良好。因为我是为用户做这件事的。我希望能够在dataGrid表中看到dropDowList组件/图标本身,而不是单击单元格,然后出现dropDownList供我选择。我能做到这一点吗??我必须用弹性皮肤还是什么?请指导我如何才能做到这一点,如果可能,请给我一个例子 谢谢 雷卡 这是我现在掌握的代码:Apache flex 如何在FlexDataGrid中显示DropDownList组件?,apache-flex,datagrid,Apache Flex,Datagrid,我对flex很陌生。我已经成功地在我的dataGrid表中添加了dropDownList。dropDownList运行良好。因为我是为用户做这件事的。我希望能够在dataGrid表中看到dropDowList组件/图标本身,而不是单击单元格,然后出现dropDownList供我选择。我能做到这一点吗??我必须用弹性皮肤还是什么?请指导我如何才能做到这一点,如果可能,请给我一个例子 谢谢 雷卡 这是我现在掌握的代码: <fx:Script> <![CDATA[
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import spark.events.IndexChangeEvent;
import mx.controls.Alert;
[Bindable]
private var myDP:ArrayCollection = new ArrayCollection([
{label1:"Order #2314", quant:3, color:'red'},
{label1:"Order #2315", quant:3, color:'red'}
]);
]]>
</fx:Script>
<s:DataGrid id="myDG" x="29" y="33" width="393" height="151" dataProvider="{myDP}"
editable="true" variableRowHeight="true">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="label1" headerText="Order #" editable="false"/>
<s:GridColumn dataField="quant" headerText="Qty" editable="true"/>
<s:GridColumn dataField="color" headerText="Color" editable="true">
<s:itemEditor>
<fx:Component>
<s:GridItemEditor>
<fx:Script>
<![CDATA[
import mx.core.FlexGlobals;
import mx.events.FlexEvent;
import spark.events.IndexChangeEvent;
override public function set value(newValue:Object):void {
cb.selectedItem = newValue;
}
override public function get value():Object {
return cb.selectedItem.toString();
}
override public function setFocus():void {
cb.setFocus();
}
override public function save():Boolean
{
data[column.dataField] = value;
return true;
}
]]>
</fx:Script>
<s:DropDownList id="cb" requireSelection="true" skinClass="MySkins.mytestddbSkin">
<s:dataProvider>
<s:ArrayCollection>
<fx:String>red</fx:String>
<fx:String>blue</fx:String>
<fx:String>green</fx:String>
</s:ArrayCollection>
</s:dataProvider>
</s:DropDownList>
</s:GridItemEditor>
</fx:Component>
</s:itemEditor>
</s:GridColumn>
</s:ArrayList>
</s:columns >
</s:DataGrid>
红色
蓝色
绿色
您可以使用ItemRenderer而不是ItemEditor。在这种情况下,应该将GridColumn的RenderIseditable属性设置为true
然后,您可以使用DropDownList的change事件在数据提供程序中注册更改
我已经添加了两次“颜色”列,让您看到,数据实际上是在选择后编辑的
<?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 myDP:ArrayCollection = new ArrayCollection([
{label1:"Order #2314", quant:3, color:'red'},
{label1:"Order #2315", quant:3, color:'red'}
]);
]]>
</fx:Script>
<s:DataGrid id="myDG" x="29" y="33" height="151" dataProvider="{myDP}"
editable="true" variableRowHeight="true">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="label1" headerText="Order #" editable="false"/>
<s:GridColumn dataField="quant" headerText="Qty" editable="true"/>
<s:GridColumn dataField="color" headerText="Color" editable="true" width="120"/>
<s:GridColumn dataField="color" headerText="Color" editable="true" rendererIsEditable="true" width="180">
<s:itemRenderer>
<fx:Component>
<s:GridItemRenderer>
<fx:Script>
<![CDATA[
import spark.events.IndexChangeEvent;
protected function onCbChange(event:IndexChangeEvent):void
{
var value:String = (event.currentTarget as DropDownList).selectedItem;
data[column.dataField] = value;
}
]]>
</fx:Script>
<s:DropDownList id="cb" requireSelection="true" width="100%" change="onCbChange(event)">
<s:dataProvider>
<s:ArrayCollection>
<fx:String>red</fx:String>
<fx:String>blue</fx:String>
<fx:String>green</fx:String>
</s:ArrayCollection>
</s:dataProvider>
</s:DropDownList>
</s:GridItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:GridColumn>
</s:ArrayList>
</s:columns >
</s:DataGrid>
</s:Application>
红色
蓝色
绿色
您可以使用ItemRenderer而不是ItemEditor。在这种情况下,应该将GridColumn的RenderIseditable属性设置为true
然后,您可以使用DropDownList的change事件在数据提供程序中注册更改
我已经添加了两次“颜色”列,让您看到,数据实际上是在选择后编辑的
<?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 myDP:ArrayCollection = new ArrayCollection([
{label1:"Order #2314", quant:3, color:'red'},
{label1:"Order #2315", quant:3, color:'red'}
]);
]]>
</fx:Script>
<s:DataGrid id="myDG" x="29" y="33" height="151" dataProvider="{myDP}"
editable="true" variableRowHeight="true">
<s:columns>
<s:ArrayList>
<s:GridColumn dataField="label1" headerText="Order #" editable="false"/>
<s:GridColumn dataField="quant" headerText="Qty" editable="true"/>
<s:GridColumn dataField="color" headerText="Color" editable="true" width="120"/>
<s:GridColumn dataField="color" headerText="Color" editable="true" rendererIsEditable="true" width="180">
<s:itemRenderer>
<fx:Component>
<s:GridItemRenderer>
<fx:Script>
<![CDATA[
import spark.events.IndexChangeEvent;
protected function onCbChange(event:IndexChangeEvent):void
{
var value:String = (event.currentTarget as DropDownList).selectedItem;
data[column.dataField] = value;
}
]]>
</fx:Script>
<s:DropDownList id="cb" requireSelection="true" width="100%" change="onCbChange(event)">
<s:dataProvider>
<s:ArrayCollection>
<fx:String>red</fx:String>
<fx:String>blue</fx:String>
<fx:String>green</fx:String>
</s:ArrayCollection>
</s:dataProvider>
</s:DropDownList>
</s:GridItemRenderer>
</fx:Component>
</s:itemRenderer>
</s:GridColumn>
</s:ArrayList>
</s:columns >
</s:DataGrid>
</s:Application>
红色
蓝色
绿色
非常感谢您!这真的很有帮助,我真的很感激。但是如果我想在不接触dropdownlist的情况下获取值,该怎么办?说红色是我想要的颜色,因为它已经显现出来了。用户不会更改它。做那件事还有别的办法吗?另外,我想问uPlus我想问你,如果你看到我上面的代码,有一些覆盖方法,比如getValue setValue和save for the dropDown list,我怎么知道存在这样的方法,我可以覆盖它们?我在哪里可以找到这些方法?我尝试右键单击,然后转到source>override方法。我没有看到任何名为get、set value或save的方法。请告诉我,我试过阅读课本和在线flex帮助。我似乎还是不明白。再次感谢你。:)你好关于第二个问题:据我所知,如果使用内联渲染器,则无法看到可重写的方法。我认为方法列表是根据应用范围生成的。相反,您可以尝试使用外部渲染器,然后通过“source>override methods”菜单可以很好地看到其方法。对于第一个问题:您的意思是,您可以在无需用户交互的情况下读取值吗?您总是可以求助于您的数据模型(在您的例子中是myDP),并像这样读取它的值:myDP.getItemAt(1.color)。如果我误解了你的问题,请给我更具体的解释。嗨!是的,我想问你,当没有用户交互时,我是否可以读取下拉列表中的值。因此,如果下拉列表中的第一个值是红色,并且用户想要红色,那么他将不会与下拉列表交互。发生这种情况时,如何在下拉列表中捕获值?我怎么知道他没有触发下拉列表以便我可以将红色作为我的值?如果不清楚,请告诉我。我会尝试重新措辞。非常感谢非常感谢你!这真的很有帮助,我真的很感激。但是如果我想在不接触dropdownlist的情况下获取值,该怎么办?说红色是我想要的颜色,因为它已经显现出来了。用户不会更改它。做那件事还有别的办法吗?另外,我想问uPlus我想问你,如果你看到我上面的代码,有一些覆盖方法,比如getValue setValue和save for the dropDown list,我怎么知道存在这样的方法,我可以覆盖它们?我在哪里可以找到这些方法?我尝试右键单击,然后转到source>override方法。我没有看到任何名为get、set value或save的方法。请允许我试着阅读课本和在线f