I think my solution is a bit better, cause there are a lot of things may
happen before event dataProviderChanged  is going to be dispatched. I
suggest you go with that direction instead above.

czw., 25 mar 2021 o 13:20 David Slotemaker de Bruine <
[email protected]> napisał(a):

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


-- 

Piotr Zarzycki

Reply via email to