Странное поведение в DataGrid с ArrayCollection в качестве DataProvider - PullRequest
0 голосов
/ 11 ноября 2011

У меня есть Datagrid с ArrayCollection в качестве DataProvider, arrayCollection частично генерируется вызовом remoteObject, кажется, что dataprovider работает по крайней мере, пока я не пытаюсь редактировать поле ...

По RemoteObject Iполучить ArrayCollection только с полем ip, но сетка данных ищет поля ip, check и save ... Если я добавлю / отредактирую это новое поле, оно будет работать, но только при определенных условиях

DataGrid:

<s:DataGrid id="datagrid" left="10" right="10" top="136" 
            dataProvider="{listaIPCheck}" bottom="10" requestedRowCount="4">
    <s:columns>
        <s:ArrayList>
            <s:GridColumn dataField="ip" headerText="Asset"/>
            <s:GridColumn dataField="check" headerText="Inventory"/>
            <s:GridColumn dataField="save" headerText="Salvataggio"/>
        </s:ArrayList>
    </s:columns>
</s:DataGrid>

Сценарий:

[Bindable]private var listaIPCheck:ArrayCollection; 

private function ro_resultHandler(event:Event=null):void
{
  listaIPCheck = new ArrayCollection();
  listaIPCheck = ro.getListUpdate.lastResult;
  heap = 0;         
  // Read Below {POINT #1}
  init3();  
}

private function init3():void
{
 // Read Below {POINT #2}
 if (heap<listaIPCheck.length)
 {
    // omitted the initialization of the process p
    p.addEventListener(NativeProcessExitEvent.EXIT, onExit);
    try{                        
      p.start(startupInfo);
    }catch(e:Error){}
 }
}


private function onExit(e:NativeProcessExitEvent):void {    
    // Read below {POINT #3}
}

Вот мой код, теперь, как вы можете видеть, есть 3 строки, где я написал, чтобы прочитать ниже ..Давайте предположим, что вместо простой строки комментария (один раз за раз) нужно поместить эту простую for

for (var k:Number=0;k<listaIPCheck.length;k++)
{
  listaIPCheck.getItemAt(k).check = "checkVal";
  listaIPCheck.getItemAt(k).save = "saveVal";
}

Этот код всегда работает в 3 точках, поэтому в конце вызова ArrayCollection всегдазаполнены новыми значениями, но таблица данных обновляет элементы только в точках #1 и #2 Почему бы не в Point #3 ???

1 Ответ

0 голосов
/ 11 ноября 2011

Причина, по которой DataGrid не обновляется при изменении свойств элемента в ArrayCollection, заключается в том, что изменение свойств не вызывает событие collectionChange. DataGrid не может знать, что свойства внутри объекта изменились. Это связано с указателями и областями памяти, а также с тем, что именно DataGrid просматривает для целей связывания.

В большинстве случаев метод invalidateList () заставляет обновить отображение. Вы можете вызвать метод refresh () или метод itemUpdated () в коллекции или полностью заменить dataProvider для принудительного обновления.

...