flex 4.0中的datagrid的不同渲染器

时间:2014-06-09 16:40:13

标签: flex datagrid

我在flex 4.0中工作,我有一个包含三列的数据网格。第二列应显示用户根据这些规则做出的选择:如果他们只选择了一个名称,则在该网格单元格中显示一个带有名称的标签,如果他们选择了多个名称,那么下拉列表应该是显示标题为“Multiple Selected”,单击下拉列表将显示与该条目关联的所有名称。因此,第二列可以混合使用标签和下拉列表。作为示例,第一个条目他们只选择一个人,因此对于第一行,第二个列显示带有人名的标签。然后在第二个条目中说他们选择了2个名称,第二行第二列显示了下拉列表,下拉列表中有两个名称。如您所见,第二列有一个标签和一个下拉列表混合。请注意,选择过程不是在数据网格中进行的,只是通过为数据网格设置数据提供者来提供信息。

1 个答案:

答案 0 :(得分:0)

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

                                                             

                                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>