I agree that you cannot tell what type of data a null is. 

The sort routine(s) has no problem sorting nulls when the non-null 
data is string. It also works for completely null columns. 

I think a reasonable solution would be a new column 
attribute, "sortDataType" (values: ascii, number, date) for datagrid 
columns. If you wanted to go crazy, add another 
attribute, "nullCollateOrder" (values: low, high). Modifying the 
existing sort routines to handle nulls should be fairly trivial. This 
may improve performance for columns where these attributes are 
specified since the routine doesn't need to read data to determine 
the type of sort to perform.

A different approach might be an attribute nvl(value), where any 
nulls would be converted to the value specified. Examples might be nvl
(0), nvl(99999), nvl(01/01/0001), or nvl(12/31/5600)

I realize I must deal with the here and now, so how would you write a 
generic function to hande this? 

It is my understanding that the sortCompareFunction wants a function 
like mySort(obj1:Object,obj2:Object). obj1 and obj2 are two objects  
that represent two rows, and to access the column to compare you need 
to know the property such as obj1.myDate, or obj[4]. In order to 
write a generic routine I need to know know what column has been 
clicked.

Paul

--- In flexcoders@yahoogroups.com, "Alex Harui" <[EMAIL PROTECTED]> wrote:
>
> because null can be assigned to anything is does not have a "type" 
so we
> can't tell by examining the data if you want to sort by date, 
number,
> etc.
>  
> Where do you want nulls to appear in a sort?  Could go anywhere 
right?
> That's why you'll have to write your own compare function with the 
null
> handling rules you want.
>  
> I haven't tried writing a generic compare function, but I don't see 
why
> it wouldn't be possible.
> 
> ________________________________
> 
> From: flexcoders@yahoogroups.com 
[mailto:[EMAIL PROTECTED] On
> Behalf Of aceoohay
> Sent: Friday, November 30, 2007 1:15 PM
> To: flexcoders@yahoogroups.com
> Subject: [flexcoders] Re: Sorting problem on date and numbers with 
null
> values, I think
> 
> 
> 
> The data is fully populated at the time the column header is 
> clicked. However some of the cells are null.
> 
> We certainly disagree on this:-) 
> 
> Since a null is a valid result for all data types, it seems to me 
> that any sort algorithm should handle the universe of valid data 
> elements for that type. 
> 
> Additionally there appears to be no way to write a generic 
> sortCompareFunction handler that will handle any column from any 
> datagrid. If this is true then the developer needs to decide what 
> type of data is being stored in each column, can nulls ever exist 
in 
> this column and then write a custom sort routine for that column.
> 
> If in fact Flex cannot sort columns with nulls, and every column 
> that could contain a null requires the developer to write a 
separate 
> custom sort handler, I think that "serious shortcoming" is a polite 
> way of stating the issue.
> 
> Is there a way of working around this "feature?"
> 
> Paul
> --- In flexcoders@yahoogroups.com <mailto:flexcoders%
40yahoogroups.com>
> , "Alex Harui" <aharui@> wrote:
> >
> > Well, I don't see it as a shortcoming that we default to 
efficient 
> sort
> > algorithms that assume that all values are of the same type. 
> Seems like
> > all you need is a comparefunction for dates and one for numbers 
and
> > assign the correct function to the appropriate column. Also note 
> that
> > if you sort with nulls for data that hasn't arrived yet, you'll 
> probably
> > have to re-sort as the data arrives. The collections generally 
> wait
> > until all data has arrived to do the sort so it doesn't have to 
> keep
> > resorting as data has arrived.
> > 
> > So, you could wait for all data to arrive as well, or maybe 
monkey-
> patch
> > the sort code to handle null. You can file an enhancement 
> request, but
> > I don't see it getting done in 3.0
> > 
> > ________________________________
> > 
> > From: flexcoders@yahoogroups.com <mailto:flexcoders%
40yahoogroups.com>
> 
> [mailto:flexcoders@yahoogroups.com <mailto:flexcoders%
40yahoogroups.com>
> ] On
> > Behalf Of aceoohay
> > Sent: Friday, November 30, 2007 9:13 AM
> > To: flexcoders@yahoogroups.com <mailto:flexcoders%
40yahoogroups.com> 
> > Subject: [flexcoders] Re: Sorting problem on date and numbers 
with 
> null
> > values, I think
> > 
> > 
> > 
> > What is the workaround?
> > 
> > The sortCompareFunction does not seem to be reasonable, since a 
> > version needs to be written for each column in each grid.
> > 
> > This seems like a serious shortcoming...
> > 
> > Paul
> > 
> > --- In flexcoders@yahoogroups.com
> <mailto:flexcoders%40yahoogroups.com>  <mailto:flexcoders%
> 40yahoogroups.com>
> > , "Alex Harui" <aharui@> wrote:
> > >
> > > THe default sort code can't handle null as it isn't a date or 
> > number
> > > 
> > > ________________________________
> > > 
> > > From: flexcoders@yahoogroups.com
> <mailto:flexcoders%40yahoogroups.com>  <mailto:flexcoders%
> 40yahoogroups.com>
> > 
> > [mailto:flexcoders@yahoogroups.com
> <mailto:flexcoders%40yahoogroups.com>  <mailto:flexcoders%
> 40yahoogroups.com>
> > ] On
> > > Behalf Of aceoohay
> > > Sent: Thursday, November 29, 2007 8:49 PM
> > > To: flexcoders@yahoogroups.com <mailto:flexcoders%
40yahoogroups.com>
> <mailto:flexcoders%
> 40yahoogroups.com> 
> > > Subject: [flexcoders] Re: Sorting problem on date and numbers 
> with 
> > null
> > > values, I think
> > > 
> > > 
> > > 
> > > When I said no values returned from the DB, I meant that the 
> grid 
> > is 
> > > populated with some records that have the values in the 
> > number/date 
> > > column, and others that don't.
> > > 
> > > Paul
> > > --- In flexcoders@yahoogroups.com
> <mailto:flexcoders%40yahoogroups.com> 
> > <mailto:flexcoders%40yahoogroups.com> <mailto:flexcoders%
> > 40yahoogroups.com>
> > > , "aceoohay" <pauls@> wrote:
> > > >
> > > > I running flexbuilder 2.0.1, AS 3.
> > > > 
> > > > I have a number of datagrids. In two of my grids I have date 
> and 
> > > > number fields that sometimes have no values returned from the 
> > DB. 
> > > > When I click the heading on these columns to sort Ascending 
> they 
> > > work 
> > > > fine. When I click a second time (descending) I get the 
> > following 
> > > > error;
> > > > 
> > > > 
===============================================================
> > > > Error: Cannot determine comparator for SortField with 
> > > > name ''MyNumberDataField''.
> > > > at mx.collections::SortField/::nullCompare()
> > > > at 
> > > > 
> > > 
> > 
> 
mx.collections::SortField/http://www.adobe.com/2006/flex/mx/internal:
> <http://www.adobe.com/2006/flex/mx/internal:> 
> > <http://www.adobe.com/2006/flex/mx/internal:
> <http://www.adobe.com/2006/flex/mx/internal:> > 
> > :
> > > <http://www.adobe.com/2006/flex/mx/internal::
> <http://www.adobe.com/2006/flex/mx/internal::> 
> > <http://www.adobe.com/2006/flex/mx/internal::
> <http://www.adobe.com/2006/flex/mx/internal::> > > 
> > > > internalCompare()
> > > > at mx.collections::Sort/::internalCompare()
> > > > at mx.collections::Sort/findItem()
> > > > at mx.collections::ListCollectionView/getItemIndex()
> > > > at ::ListCollectionViewCursor/::collectionEventHandler()
> > > > at 
> > > > 
> > > 
> > 
> 
flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchE
> > v
> > > > entFunction()
> > > > at flash.events::EventDispatcher/dispatchEvent()
> > > > at mx.collections::ListCollectionView/dispatchEvent()
> > > > at mx.collections::ListCollectionView/::internalRefresh()
> > > > at mx.collections::ListCollectionView/refresh()
> > > > at mx.controls::DataGrid/::sortByColumn()
> > > > at mx.controls::DataGrid/::headerReleaseHandler()
> > > > at 
> > > > 
> > > 
> > 
> 
flash.events::EventDispatcher/flash.events:EventDispatcher::dispatchE
> > v
> > > > entFunction()
> > > > at flash.events::EventDispatcher/dispatchEvent()
> > > > at mx.core::UIComponent/dispatchEvent()
> > > > at mx.controls::DataGrid/mx.controls:DataGrid::mouseUpHandler
> > > > ()
> > > > 
===============================================================
> > > > 
> > > > I am not using a sort compare function anywhere. I have other 
> > text 
> > > > type fields with nulls that seem to sort correctly.
> > > > 
> > > > This seems like a bug. 
> > > > 
> > > > Any ideas?
> > > > 
> > > > Paul
> > > >
> > >
> >
>


Reply via email to