flex-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Pan Li (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (FLEX-35224) DataGrid doesn't support paging on large data set
Date Wed, 28 Dec 2016 14:58:58 GMT

    [ https://issues.apache.org/jira/browse/FLEX-35224?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15783043#comment-15783043
] 

Pan Li commented on FLEX-35224:
-------------------------------

The three components I was trying to create for paging:
1 The model with page is very straight forward.
2 To filter the records in "current page", it looks like the only layer between actual data
provider to UI controls is in DataItemRendererFactoryForArrayList:
{code}
protected function dataProviderChangeHandler(event:Event):void
		{
			var dp:IArrayList = dataProviderModel.dataProvider as IArrayList;
			if (!dp)
				return;
			
			dataGroup.removeAllElements();
			
			var listView:IListView = _strand.getBeadByType(IListView) as IListView;
			var presentationModel:IListPresentationModel = _strand.getBeadByType(IListPresentationModel)
as IListPresentationModel;
			
			var n:int = dp.length; 
			for (var i:int = 0; i < n; i++)
			{				
				var ir:ISelectableItemRenderer = itemRendererFactory.createItemRenderer(dataGroup) as
ISelectableItemRenderer;
				dataGroup.addElement(ir);
				if (presentationModel) {
					UIBase(ir).height = presentationModel.rowHeight;
					
					// ensure that the IR spans the width of its column
					var style:SimpleCSSStyles = new SimpleCSSStyles();
					style.right = 0;
					style.left = 0;
					UIBase(ir).style = style;
				}
				setData(ir, dp.getItemAt(i), i);
				
				var newEvent:ItemRendererEvent = new ItemRendererEvent(ItemRendererEvent.CREATED);
				newEvent.itemRenderer = ir;
				dispatchEvent(newEvent);
			}
			
			IEventDispatcher(_strand).dispatchEvent(new Event("itemsCreated"));
		}
{code}

I can get it work for my purpose to create a new DataItemRendererFactoryForArrayList
but one problem: the rendererfactory is a relative complex class, and it uses lots of implementation
details of default DataGrid

3 the buttons to switch pages
I didn't find a good place to create the extra buttons for the UI, if I create a new "bead"
and let it to add buttons for "strand", then I can't ensure that the code of buttons is added
after all datagrid UI is created. Should I just create another DataView? It surely works but
is there easy solution?


in summary I could have finish it following your suggestion, but my problems are 
1 it looks like there is no obvious "bead" to filter data list, the rendererfactory calls
the raw data directly
2 there is no obvious place to create extra UI components for the control
it make the code more complex and easy to be break if DataGrid's code is updated.

we had requested other features on filtering data grid data:
sorting on fields
https://issues.apache.org/jira/browse/FLEX-35222
and filtering on fields (not in jira now),
the both have very similar issues when implemented as FlexJS SDK extensions. 
Was I doing it wrong way? do you have more suggestion?



What if I implement these features by a custom FlexJS control which composite several existing
controls like someone would do in other frameworks, for example a paging datagrid only needs
a DataGrid and 4 buttons. I spend 2-3 hours to create a working stub, it is pure FlexJS code
(instead of FlexJS SDK code). Is it not encouraged to composite controls to implement extensions?



> DataGrid doesn't support paging on large data set
> -------------------------------------------------
>
>                 Key: FLEX-35224
>                 URL: https://issues.apache.org/jira/browse/FLEX-35224
>             Project: Apache Flex
>          Issue Type: Improvement
>            Reporter: Pan Li
>            Priority: Minor
>         Attachments: screenshot-1.png
>
>
> expected:
> Gird should support paging if data collection is large
> !screenshot-1.png!



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message