ahh Sorry I didn't notice. So you essentially need to know that
dataProvider changed, because when it happened probably your columns are
also ready. You can do this in initComplete:
var sharedModel:IDataGridModel =
dataGrid.getBeadByType(IDataGridModel) as IDataGridModel;
IEventDispatcher(sharedModel).addEventListener("dataProviderChanged",
handleDataProviderChanged);
czw., 25 mar 2021 o 12:16 David Slotemaker de Bruine <
[email protected]> napisał(a):
> Hi Piotr,
>
> I am not sure what you mea or where I am to out the listener. In the code
> above there is a listener in the extended DataGrid:
> initComplete="onInitComplete(event)"
>
>
>
> On Thu, 25 Mar 2021 at 12:06, Piotr Zarzycki <[email protected]>
> wrote:
>
>> Hi David,
>>
>> Did you try add event listener initComplete to DataGrid itself initially
>> ?
>>
>> Thanks,
>> Piotr
>>
>> czw., 25 mar 2021 o 11:38 David Slotemaker de Bruine <
>> [email protected]> napisał(a):
>>
>>> Hi,
>>>
>>> I am trying to set columns in a Datagrid depending on the size of the
>>> screen.
>>>
>>> I have extended the DataGrid Component and added Array Variables that
>>> contain the columns that should be visible at each screen size. I have
>>> added a <j:ResponsiveResizeListener localId="resizer"/> to the component.
>>> On initCompleteEvent I setup the listeners for the ResponsiveSize Events.
>>> These all fire correctly and the colums are changed dynamically when the
>>> browser size is changed. The exception is the first time the page is loaded
>>> as no "resize" event fires.
>>>
>>> I have tried manually calling the handler duing the InitCompleteEvent
>>> but the Array variables that contain the list of columns are empty at this
>>> point. Is there another event that I can listen for?
>>>
>>> The datagrid code is:
>>>
>>> <?xml version="1.0" encoding="utf-8"?>
>>> <j:DataGrid xmlns:fx="http://ns.adobe.com/mxml/2009"
>>> xmlns:js="library://ns.apache.org/royale/basic"
>>> xmlns:j="library://ns.apache.org/royale/jewel"
>>> initComplete="onInitComplete(event)"
>>> >
>>> <j:beads>
>>> <j:ResponsiveResizeListener localId="resizer"/>
>>> <!--<js:ViewDataBinding/>-->
>>> </j:beads>
>>> <fx:Script>
>>> <![CDATA[
>>> import org.apache.royale.collections.ArrayList;
>>> import
>>> org.apache.royale.jewel.supportClasses.ResponsiveSizes;
>>>
>>> public var columnsPhone:Array = new Array();
>>> public var columnsTablet:Array = new Array();
>>> public var columnsDesktop:Array = new Array();
>>> public var columnsWideScreen:Array = new Array();
>>> public var columnsFull:Array = new Array();
>>>
>>> protected function onInitComplete(event:Event):void{
>>> setResponsiveSizeIndicatorListeners();
>>> handleResponsiveSizeChange(null);
>>> }
>>>
>>> private function setColumns(newColumns:Array):void
>>> {
>>> if(newColumns.length != 0)
>>> {
>>> this.columns = newColumns;
>>> }
>>> }
>>>
>>> private function
>>> setResponsiveSizeIndicatorListeners():void
>>> {
>>> this.addEventListener('phoneResponsiveSize',
>>> handleResponsiveSizeChange);
>>> this.addEventListener('tabletResponsiveSize',
>>> handleResponsiveSizeChange);
>>> this.addEventListener('desktopResponsiveSize',
>>> handleResponsiveSizeChange);
>>> this.addEventListener('widescreenResponsiveSize',
>>> handleResponsiveSizeChange);
>>> this.addEventListener('fullResponsiveSize',
>>> handleResponsiveSizeChange);
>>> }
>>>
>>> private function handleResponsiveSizeChange(event:Event =
>>> null):void
>>> {
>>> if(resizer.currentResponsiveSize == ResponsiveSizes.PHONE) {
>>> setColumns(columnsPhone);
>>> }
>>> else if(resizer.currentResponsiveSize ==
>>> ResponsiveSizes.TABLET) {
>>> setColumns(columnsTablet);
>>> }
>>> else if(resizer.currentResponsiveSize ==
>>> ResponsiveSizes.DESKTOP) {
>>> setColumns(columnsDesktop);
>>> }
>>> else if(resizer.currentResponsiveSize ==
>>> ResponsiveSizes.WIDESCREEN) {
>>> setColumns(columnsWideScreen);
>>> }
>>> else if(resizer.currentResponsiveSize ==
>>> ResponsiveSizes.FULL) {
>>> setColumns(columnsFull);
>>> }
>>> }
>>> ]]>
>>> </fx:Script>
>>> </j:DataGrid>
>>>
>>> And I set the mxml this way:
>>>
>>> <components:DataGridExtended id="dg" width="100%" height="314"
>>>
>>> dataProvider="{pCSearchResults.pagedData}"
>>>
>>> columnsPhone="{[dgcCodigo,dgcNombre,dgcGPS,dgcTelSimple]}"
>>> columnsTablet="{[dgcCodigo,dgcNombre]}"
>>>
>>> columnsDesktop="{[dgcCodigo,dgcNombre,dgcPoblacion]}"
>>>
>>> columnsWideScreen="{[dgcCodigo,dgcNombre,dgcPoblacion,dgcGPS,]}"
>>>
>>> columnsFull="{[dgcCodigo,dgcNombre,dgcPoblacion,dgcGPS]}"
>>> >
>>> <components:columns>
>>> <j:DataGridColumn localId="dgcCodigo" label="Codigo"
>>> dataField="notesCliente" />
>>> <j:DataGridColumn localId="dgcNombre" label="Nombre"
>>> dataField="nombreCompleto" />
>>> <j:DataGridColumn localId="dgcPoblacion" label="Poblacion"
>>> dataField="poblacionNombre" />
>>> <j:DataGridColumn localId="dgcGPS" label="GPS"
>>> dataField="direccionLatLong" columnWidth="50" /><j:DataGridColumn
>>> localId="dgcTelSimple" label="Tlfno" dataField="tlfno" columnWidth="50" />
>>> </components:columns>
>>> </components:DataGridExtended>
>>>
>>
>>
>> --
>>
>> Piotr Zarzycki
>>
>
>
> --
>
> *David Slotemaker de Bruïne*
> *Head of Educational Robotics*
>
>
>
> Av. Sarriá, 130 - 08017 Barcelona
> <https://maps.google.com/?q=Av.+Sarri%C3%A1,+130+-+08017+Barcelona&entry=gmail&source=g>
>
>
> T. +34 932 523 729 ext. 135
>
> [email protected]
>
--
Piotr Zarzycki