Hi Piotr,

I could get that to work, the screen would paint only the background color
with no error in the console.

I ended up going with:

public override function set dataProvider(data:Object):void
{
super.dataProvider = data;
handleResponsiveSizeChange(null);
}

which is more or less what you where suggesting correcte? This works but I
am not sure what sort of overhead a call to  handleResponsiveSizeChange on
every update to the DataGrid, not much by the looks of things.

Thanks.

David

On Thu, 25 Mar 2021 at 12:37, Piotr Zarzycki <[email protected]>
wrote:

> 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
>


-- 

*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]

Reply via email to