Unable to change the column width dynamically in flex datagrid

一笑奈何 提交于 2019-12-25 05:09:22

问题


It's very very frustrating. I am using a singleton class (popup, which means it doesn't forget the last used variables) which contains a datagrid. I am making various columns visible/invisible, setting the widths and headers in accordance to data received from a database call. Everything works fine except that when I put the breakpoints before and after the point where I change width of columns, I do not see the change in width of datagrid at all! Instead I see some values totally out of sync as widths of datagrid column! However, since it is a singleton class, the next time I call this popup, I see widths which I did set up in last call.

I must be messing up in calling the setWidth() function (which is my custom function which changes the width of datagrid in action script). What should be the point where I should call this function? I tried in creationComplete, show and in the setter of dataprovider. Doesn't help...

I have kept horizontal scroll policy as 'off' (turning it on totally messes it up).

If I do datagrid.validateNow(), it doesn't help! And why the hell I don't see the width change reflected immediately if I put the breakpoints before and after the change. Somebody please advise me about what I am doing wrong here.

Thanks.


回答1:


First of all you are indicating yourself what might be wrong here.

1) When you update the width when the component is visible => no change

2) When you close the popup and reopen this it is ok, this also means that the item has been re-rendered whereas it was not the first time. This means that you indeed have to try and trigger this yourself.

Here are some usefull links concerning flex component lifecycle. These should help you figure out which methods to call and / or override.

http://weblog.mrinalwadhwa.com/2009/06/21/flex-4-component-lifecycle/

http://www.slideshare.net/rjowen/adobe-flex-component-lifecycle-presentation

Furthermore, you should never call validateNow() directly, but use invalidation methods instead.

I guess in this case you need to trigger the measurement of your component so a call to invalidateSize() should do just fine.

Cheers




回答2:


The key is to set the horizontalScrollPolicy="on" before you set the widths. See fixed row width in DataGrid quirk or Flex 3 DataGrid Column Width Problem



来源:https://stackoverflow.com/questions/6033513/unable-to-change-the-column-width-dynamically-in-flex-datagrid

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!