DataGrid CheckBox Itemerenderer Выглядит как ошибка ... Действует как ошибка - PullRequest
0 голосов
/ 02 марта 2010

У меня есть DataGrid, подключенный к бэкэнду с одним полем / столбцом в качестве STATUS. ГД использует как CheckBox HeaderRenderer, так и itemRenderer. Когда STATUS «сбой», я хочу показать флажок, а когда что-то еще, не показывать его (или, в качестве компромисса, отключить его). Свойство visible ни на что не влияет (я не знаю почему), поскольку флажок всегда отображается, а enabled = false просто отключает его, но все же позволяет headerRenderer проверять и снимать флажок (опять же, не знаю почему). Есть идеи, почему это происходит ??? Код довольно прост:

itemRenderer -

<?xml version="1.0" encoding="utf-8"?>
<mx:CheckBox xmlns:mx="http://www.adobe.com/2006/mxml">

<mx:Script>
<![CDATA[
    import com.fidelity.ORWS.view.requests.RequestStatus;
    import mx.controls.Alert;

    override public function set data(value:Object):void
    {
    super.data = value;
    this.selected = false;

    if(data.status == 'SUCCESS' || data.status == 'PROCESSING')
        { this.enabled = false; }           
    }
]]>
</mx:Script>
</mx:CheckBox>

HeaderRenderer -

<?xml version="1.0" encoding="utf-8"?>
<mx:CheckBox xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
    import mx.collections.ArrayCollection;
    import mx.controls.DataGrid;

    override protected function clickHandler(event:MouseEvent):void
    {
    super.clickHandler(event);

    var dg:DataGrid = this.owner as DataGrid;
    var dp:ArrayCollection = dg.dataProvider as ArrayCollection;
    var cb:requestcheckboxRenderer;

    for ( var i:int=0;i<dp.source.length;i++)
    {
    cb = dg.indexToItemRenderer(i) as requestcheckboxRenderer;
    cb.selected = ( selected ) ? true : false;
    }
    }
]]>
</mx:Script>
</mx:CheckBox>

1 Ответ

1 голос
/ 02 марта 2010

Свойство visible не будет работать, поскольку сама сетка данных делает его средства визуализации видимыми и невидимыми при добавлении или удалении их. Если вы хотите скрыть этот флажок, вам нужно либо изменить средство отображения заголовка сетки данных на что-то другое в тот момент, когда вы его скрываете, либо изменить HeaderRenderer на контейнер (VBox или любой другой), содержащий флажок. Затем вы можете установить свойство visible флажка, которое будет отличаться от свойства visible средства визуализации заголовка.

Если флажок установлен, даже если вы установили enabled=false, это, вероятно, связано с тем, что вы переопределяете clickHandler. Этот, по-видимому, все еще вызывается при нажатии, и это имеет смысл (не потому, что компонент отключен, щелчки больше не происходят). Вместо этого вы должны поймать изменение флажка другим способом. Например, добавьте прослушиватель событий для события change.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...