Apache flex flex 4.0中datagrid的不同呈现器

Apache flex flex 4.0中datagrid的不同呈现器,apache-flex,datagrid,Apache Flex,Datagrid,我在Flex4.0中工作,我有一个三列的数据网格。第二列应显示用户根据这些规则所做的选择:如果他们只选择了一个名称,则显示带有该网格单元中名称的标签;如果他们选择了多个名称,则应显示一个下拉列表,标题为“多个选定项”单击时,下拉列表将显示与该条目关联的所有名称。因此,第二列可以混合使用标签和下拉列表。例如,他们只选择了一个人作为第一个条目,因此第一行第二列显示了一个带有此人姓名的标签。然后在第二个条目中,假设他们选择了两个名称,第二行第二列显示了一个下拉列表,下拉列表中有两个名称。如您所见,第二

我在Flex4.0中工作,我有一个三列的数据网格。第二列应显示用户根据这些规则所做的选择:如果他们只选择了一个名称,则显示带有该网格单元中名称的标签;如果他们选择了多个名称,则应显示一个下拉列表,标题为“多个选定项”单击时,下拉列表将显示与该条目关联的所有名称。因此,第二列可以混合使用标签和下拉列表。例如,他们只选择了一个人作为第一个条目,因此第一行第二列显示了一个带有此人姓名的标签。然后在第二个条目中,假设他们选择了两个名称,第二行第二列显示了一个下拉列表,下拉列表中有两个名称。如您所见,第二列有一个标签和一个下拉列表。注意,选择过程不是在datagrid中进行的,信息只是通过为datagrid设置dataprovider来提供的

我想您可以使用标签和下拉列表创建itemrenderer,但在满足条件时,您可以禁用其中一个,同时启用另一个。这种方法的唯一问题是我也修改了宽度,因为标签位于第一位,并将下拉列表向右推(即使它不可见,有时甚至超出了列的宽度)。因此,我调整每个组件的宽度(将一个设置为100%,而另一个设置为0%,具体取决于哪个组件可见),但由于某种原因,当我更新数据时,它不会立即更改单元格,只有在单击标题时,它才会更改宽度和可见性。我认为这是因为UI没有提交宽度立即调整?我知道这是宽度,因为如果我在数据更新后注释掉宽度调整,您会立即在datagrid中看到更改。例如,如果我尚未选择所选内容的名称,则单元格为空。然后我只选择一个人,然后使用标签组件在单元格中立即显示姓名。然后,如果我选择另一个名称,数据会再次更新,您会在数据单元格中看到一些空格(这是一个不可见的标签,但有一些文本会导致一些空格)和带有所选名称的下拉列表,并且再次显示,这会立即生效,我不必单击网格来更新它。以下是未注释宽度调整的代码:

受保护函数mxdatagriditemrenderer1\u dataChangeHandler(事件:FlexEvent):void
{
if(数据.判断部分.判断债务人.长度==1)
{//显示标签并禁用下拉列表
lblData.visible=true;
lblData.enabled=true;
lblData.percentWidth=100;
DDLdatagrid.visible=false;
DDLdatagrid.enabled=false;
DDLdatagrid.percentWidth=0;
}
否则如果(数据.判断部分.判断债务人.长度>1)
{
lblData.visible=false;
lblData.enabled=false;
lblData.percentWidth=0;
DDLdatagrid.visible=true;
DDLdatagrid.enabled=true;
DDLdatagrid.percentWidth=100;
}
其他的
{
lblData.visible=false;
lblData.enabled=false;
lblData.percentWidth=0;
DDLdatagrid.visible=false;
DDLdatagrid.enabled=false;
DDLdatagrid.percentWidth=0;
}
}
受保护函数mxdatagriditemrenderer1\u creationCompleteHandler(事件:FlexEvent):void
{
lblData.visible=false;
lblData.enabled=false;
lblData.percentWidth=0;
DDLdatagrid.visible=false;
DDLdatagrid.enabled=false;
DDLdatagrid.percentWidth=0;
}
]]>

不确定这里是否有问题,但每列都有一个labelFunction和一个itemRenderer属性,这两个属性是互斥的。只需再次设置数据提供程序,它就工作了(JudgementDisplay是datagrid id):JudgementDisplay.dataprovider=JR;
                                protected function mxdatagriditemrenderer1_dataChangeHandler(event:FlexEvent):void
                                {
                                    if(data.judgmentpart.JudgmentDebtors.length ==1)
                                    {//display label and disable the dropdown list
                                        lblData.visible = true;
                                        lblData.enabled = true;
                                        lblData.percentWidth = 100;
                                        DDLdatagrid.visible = false;
                                        DDLdatagrid.enabled = false;
                                        DDLdatagrid.percentWidth = 0;
                                    }
                                    else if (data.judgmentpart.JudgmentDebtors.length >1)
                                    {
                                        lblData.visible = false;
                                        lblData.enabled = false;
                                        lblData.percentWidth = 0;
                                        DDLdatagrid.visible = true;
                                        DDLdatagrid.enabled = true;
                                        DDLdatagrid.percentWidth = 100;
                                    }
                                    else
                                    {
                                        lblData.visible = false;
                                        lblData.enabled = false;
                                        lblData.percentWidth = 0;
                                        DDLdatagrid.visible = false;
                                        DDLdatagrid.enabled = false;
                                        DDLdatagrid.percentWidth = 0;
                                    }
                                }

                                protected function mxdatagriditemrenderer1_creationCompleteHandler(event:FlexEvent):void
                                {
                                    lblData.visible = false;
                                    lblData.enabled = false;
                                    lblData.percentWidth = 0;
                                    DDLdatagrid.visible = false;
                                    DDLdatagrid.enabled = false;
                                    DDLdatagrid.percentWidth = 0;
                                }

                            ]]>
                        </fx:Script>
                        <s:HGroup width="100%" verticalAlign="middle">
                            <s:Label id="lblData" text="{data.judgmentpart.JudgmentDebtors}"
                                     />
                            <s:DropDownList id="DDLdatagrid" dataProvider="{data.judgmentpart.JudgmentDebtors}"/>
                        </s:HGroup>
                    </s:MXDataGridItemRenderer>