在datagrid上排序时Flex的itemrenderer问题

时间:2011-07-25 15:58:33

标签: flex datagrid flex3 itemrenderer

请按照我的解释:

  1. 我有一个datagrid,它包含一个有3列
  2. 的数据提供者
  3. 这3列中的一列是按钮itemrenderer,其他是整数
  4. 我将4行放入datagrid
  5. 我在一行中设置了一个按钮以禁用,其他按钮已启用
  6. 然后我尝试通过“单击”对具有整数列(而不是按钮列)的列标题对数据网格进行排序
  7. 预期的结果是禁用按钮将与其初始行一起使用。但实际结果是,当您单击2-3次排序时,按钮(在所有行中)将具有有线行为。禁用按钮有时会返回启用,有时会被禁用但会停留在错误的行上。
  8. 有人有解决方案吗?

4 个答案:

答案 0 :(得分:0)

如果您的按钮项呈示器是自定义的,您可能只需要覆盖“设置数据”。重新使用itemrenderer并在排序时更改数据。项目渲染器本身不会移动。

发布项目渲染器的代码,我们可以提供更好的答案。

答案 1 :(得分:0)

谢谢你的帮助。

但是,无论如何我都没有自定义按钮。它只是flex中的一个常用按钮,但我确实通过使用itemrenderer将它放在一列中。这是在网格中构建按钮控件的代码

                           

         protected function redispatch(sourceEvent : Event ) : void {                   
                var newEvent : DynamicEvent = new DynamicEvent("aButtonWasClicked",true);                   
                newEvent["commentClickedEvent"] = sourceEvent;
                dispatchEvent(newEvent);
            }                       

            private function dispatchButtObj(sourceEvent:Event):void{
                var newEvent : DynamicEvent = new DynamicEvent("aButtonWasCreated",true);                   
                newEvent["commentCreatedEvent"] = sourceEvent;
                dispatchEvent(newEvent);
            }

    ]]></mx:Script>
<mx:Button label="Comment" height="20" width="48" textAlign="center" creationComplete="dispatchButtObj(event)" click="redispatch(event)"/>  

这就是我如何使用它

<mx:DataGridColumn headerText="Action" itemRenderer="com.myitem.controls.CommentButton" width="118" editable="false"/>

答案 2 :(得分:0)

如果网格有滚动条,则总是重复使用ItemRendrer,因此导致了奇怪的行为。

阅读有关ItemRenderer生命周期的好文章: Peter Ent {/ 3}} {/ 3}

答案 3 :(得分:0)

听起来你没有正确地重新初始化你的渲染器。每次实现自定义itemRenderer时,最好是覆盖数据访问器(字面数据)。然后,例如,如果“blue”属性为true,则将蓝色的uicomponent着色,您不应该考虑这一点,否则,uicomponent不会着色,因为itemRenderers会回收每个基于列表的组件的内容。也许这个特定的渲染器刚好被分配给另一个数据对象,然后可能uicomponent已经是蓝色。见?