Nulls in (Advanced)DataGrid column causes a column sort to throw RTE
If an (Advanced)DataGrid has null values in the data provider, then sorting the associated column in the grid throws the following error:
Error: Cannot determine comparator for SortField with name ''XXX''.
Adobe already has a bug report: https://bugs.adobe.com/jira/browse/SDK-13808?actionOrder=desc.
There is a bit of discussion around this, with some people of the opinion that this is not really a bug - that it is the developer’s responsibility to ensure that either a) there are no nulls in the data or b) if there are, write your own sort compare function that handles the nulls. I call it a genuine bug in the Flex SDK; if my grid displays nulls, then it should know how to sort nulls as well - i.e. don’t tell me my data is valid when displaying but then not valid when sorting. Especially as there is an intuitive rule-of-thumb that could be used for sorting nulls of any data type (send them to the top of the ascending sort).
Probably the best workaround is to avoid the nulls in the first place. In my case, I couldn’t do that in the data source, so I did it in the item renderer:
package com.symmetri.skins { import mx.controls.advancedDataGridClasses.*; public class ReportDataGridItemRenderer extends AdvancedDataGridItemRenderer { public function ReportDataGridItemRenderer() { super(); } override public function validateNow():void { if ((listData) && (data)) { var _fieldName:String = AdvancedDataGridListData(listData).dataField; var _value:String = String(data[AdvancedDataGridListData(listData).dataField]); //fill out null values with blanks if (data[AdvancedDataGridListData(listData).dataField] == null) data[AdvancedDataGridListData(listData).dataField] = ““; } super.validateNow(); } } }
Actually, I just though of something: does this approach have a shortcoming - will it work if not all rows in the data are rendered?
