Re: [flexcoders] Date Sort Question
Ahh.. I looked at the source and realized what I was doing wrong. The way the code is written, if you pass the sort field constructor a value of 'true' for caseInsensitive then it automatically does a string compare on the field. This makes sense and is actually a good way to enforce a string compare on a data field if that is what you want. However, you just need to be careful if you accidentally put 'true' in there as you are copying and pasting code from other SortField objects... like me! This does a String compare: new SortField(myDate,true); This does a Date compare: new SortField(myDate); - Kevin On Nov 18, 2007, at 8:18 PM, Kevin wrote: The docs say this about the default compare function used in SortField assignments: (from Class SortField ) The default value is an internal compare function that can perform a string, numeric, or date comparison in ascending or descending order, with case-sensitive or case-insensitive string comparisons. Specify your own function only if you need a need a custom comparison algorithm. But I have found that I must implement a custom sort function to make sorting on a date field work. Am I doing something wrong or are the docs mislead in saying that the default compare function can handle date sorting? Thanks, Kevin
RE: [flexcoders] date sort
Matt: I tried your example script but it works for only first click and sort data in ascending order. Any click after then produce no change to grid items. This script raises me another question to you, feedbackCreationDate is declared as Date data type which means the default ordering should work. If I remove sortGrid function on headerRelease and set sortOnHeaderRelease to true then it sort column as a String and not as a Date data type, which I expect to do so. By default date format in flex is DOW MON DAY HOURS:MIN:SEC GMTTIMEDIFFERENCE YEAR Therefore date column is sort on day of week which yields Friday date on top and Wednesday on bottom if we sort column on ascending. Regards, Nischal Pathania From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of Matt Chotin Sent: Wednesday, October 12, 2005 19:21 To: flexcoders@yahoogroups.com Subject: RE: [flexcoders] date sort OK, the problem is that we end up executing the formatDate function and sorting those values instead of using your comparator functions on the fields as specified by the actual column. Here's a small example that will get you part of the way. You'll need to finish it out to get it sorting ascending and descending (for example the headerRelease functionality will need to be made more aware of what header you pressed to know if it should do anything). mx:Application xmlns:mx=http://www.macromedia.com/2003/mxml; xmlns=* initialize=setup() mx:Script ![CDATA[ var dFormat:mx.formatters.DateFormatter; function setup():Void { dFormat = new mx.formatters.DateFormatter(); var dp:Array = []; for (var i:Number=0; i 1000; i++) { dp.push({feedbackCreationDate: new Date(Math.round(Math.random() * 2006), Math.round(Math.random() * 12), Math.round(Math.random() * 31))}); } dg.dataProvider = dp; } function sortGrid(a, b) { a = a.feedbackCreationDate.getTime(); b = b.feedbackCreationDate.getTime(); if (a == b) return 0; else if (a b) return -1; else return 1; } function formatDate(rowData):String { return (dFormat.format(rowData.feedbackCreationDate)); } ]] /mx:Script mx:DataGrid id=dg headerRelease=dg.dataProvider.sortItems(sortGrid) mx:columns mx:Array mx:DataGridColumn columnName=feedbackCreationDate headerText=Date labelFunction=formatDate sortOnHeaderRelease=false / /mx:Array /mx:columns /mx:DataGrid /mx:Application In answer to your second question there is currently not a way to remove the ordering once you start clicking on headers. You would need to have a copy of the data in the original order and then re-assign the dataProvider to that copy. Matt From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of Nischal Pathania Sent: Wednesday, October 12, 2005 9:01 AM To: flexcoders@yahoogroups.com Subject: RE: [flexcoders] date sort Everyone: I have used sortCompareFunction attribute of gridcolumn to resolve date sort issue in my application. Below is the part of my code . mx:DataGridColumn headerText=Date columnName=joinDate width=100 sortCompareFunction=sortGrid labelFunction=formatDate / . function sortGrid(a, b, index) { if (a == b) return 0; else if (a b) return -1; else return 1; } function formatDate(rowData):String { var dFormat = new mx.formatters.DateFormatter(); return (dFormat.format(rowData.feedbackCreationDate)); } 1. But now I'm facing a performance issue. My application is populating 1000 records in the grid and when I click on the header to sort grid on date order then it hangs the application and throw script error A script in this movie is causing Macromedia Flash Player 8 to run slowly. If continues to run, your computer may become unresponsive. Do you want to abort the script? Same script works fine if I populate with less number of records, say 100, in grid but then this takes more then 10 secs to sort data. Do we have any solution to this issue? Also, if I remove labelFunction then script works fine for 1000 records but takes long time to order all data. 2. Is it possible to remove ordering from the grid and show default order list? Click one will sort data in ascending
RE: [flexcoders] date sort
Yes, as I said the example was meant to get you part way, to get the sort to work in both directions you need to do more work that I dont have time to write for you. There are some sorting examples for different purposes on my blog at http://weblogs.macromedia.com/mchotin/archives/2004/04/large_data_sets_1.cfm that you may be able to use as a basis as well. You are right that the sort acts as if it is sorting the strings instead of the underlying data. This is one reason why you had to use the custom sort. We are looking at making some of this more intuitive via a different mechanism in Flex 2. Matt From: flexcoders@yahoogroups.com [mailto:flexcoders@yahoogroups.com] On Behalf Of Nischal Pathania Sent: Thursday, October 13, 2005 2:44 AM To: flexcoders@yahoogroups.com Subject: RE: [flexcoders] date sort Matt: I tried your example script but it works for only first click and sort data in ascending order. Any click after then produce no change to grid items. This script raises me another question to you, feedbackCreationDate is declared as Date data type which means the default ordering should work. If I remove sortGrid function on headerRelease and set sortOnHeaderRelease to true then it sort column as a String and not as a Date data type, which I expect to do so. By default date format in flex is DOW MON DAY HOURS:MIN:SEC GMTTIMEDIFFERENCE YEAR Therefore date column is sort on day of week which yields Friday date on top and Wednesday on bottom if we sort column on ascending. Regards, Nischal Pathania From: flexcoders@yahoogroups.com [mailto:flexcoders@yahoogroups.com] On Behalf Of Matt Chotin Sent: Wednesday, October 12, 2005 19:21 To: flexcoders@yahoogroups.com Subject: RE: [flexcoders] date sort OK, the problem is that we end up executing the formatDate function and sorting those values instead of using your comparator functions on the fields as specified by the actual column. Here's a small example that will get you part of the way. You'll need to finish it out to get it sorting ascending and descending (for example the headerRelease functionality will need to be made more aware of what header you pressed to know if it should do anything). mx:Application xmlns:mx=http://www.macromedia.com/2003/mxml xmlns=* initialize=setup() mx:Script ![CDATA[ var dFormat:mx.formatters.DateFormatter; function setup():Void { dFormat = new mx.formatters.DateFormatter(); var dp:Array = []; for (var i:Number=0; i 1000; i++) { dp.push({feedbackCreationDate: new Date(Math.round(Math.random() * 2006), Math.round(Math.random() * 12), Math.round(Math.random() * 31))}); } dg.dataProvider = dp; } function sortGrid(a, b) { a = a.feedbackCreationDate.getTime(); b = b.feedbackCreationDate.getTime(); if (a == b) return 0; else if (a b) return -1; else return 1; } function formatDate(rowData):String { return (dFormat.format(rowData.feedbackCreationDate)); } ]] /mx:Script mx:DataGrid id=dg headerRelease=dg.dataProvider.sortItems(sortGrid) mx:columns mx:Array mx:DataGridColumn columnName=feedbackCreationDate headerText=Date labelFunction=formatDate sortOnHeaderRelease=false / /mx:Array /mx:columns /mx:DataGrid /mx:Application In answer to your second question there is currently not a way to remove the ordering once you start clicking on headers. You would need to have a copy of the data in the original order and then re-assign the dataProvider to that copy. Matt From: flexcoders@yahoogroups.com [mailto:flexcoders@yahoogroups.com] On Behalf Of Nischal Pathania Sent: Wednesday, October 12, 2005 9:01 AM To: flexcoders@yahoogroups.com Subject: RE: [flexcoders] date sort Everyone: I have used sortCompareFunction attribute of gridcolumn to resolve date sort issue in my application. Below is the part of my code . mx:DataGridColumn headerText=Date columnName=joinDate width=100 sortCompareFunction=sortGrid labelFunction=formatDate / . function sortGrid(a, b, index) { if (a == b) return 0; else if (a b) return -1; else return 1; } function formatDate(rowData):String { var dFormat = new mx.formatters.DateFormatter(); return (dFormat.format(rowData.feedbackCreationDate)); } 1. But now I'm facing a performance issue. My application is populating 1000 records in the grid and when I click on the header to sort grid on date order then it hangs the application and throw script error A script in this movie is causing Macromedia Flash Player 8 to run slowly. If continues to run, your computer may become unresponsive. Do you want to abort the script? Same script works fine if I populate with less number of records, say 100, in grid but then this takes more then 10 secs to sort data. Do we have any solution to this issue? Also, if I remove labelFunction then script works fine for 1000 records but takes long time to order
RE: [flexcoders] date sort
Everyone: I have used sortCompareFunction attribute of gridcolumn to resolve date sort issue in my application. Below is the part of my code . mx:DataGridColumn headerText=Date columnName=joinDate width=100 sortCompareFunction=sortGrid labelFunction=formatDate / . function sortGrid(a, b, index) { if (a == b) return 0; else if (a b) return -1; else return 1; } function formatDate(rowData):String { var dFormat = new mx.formatters.DateFormatter(); return (dFormat.format(rowData.feedbackCreationDate)); } 1. But now I'm facing a performance issue. My application is populating 1000 records in the grid and when I click on the header to sort grid on date order then it hangs the application and throw script error A script in this movie is causing Macromedia Flash Player 8 to run slowly. If continues to run, your computer may become unresponsive. Do you want to abort the script? Same script works fine if I populate with less number of records, say 100, in grid but then this takes more then 10 secs to sort data. Do we have any solution to this issue? Also, if I remove labelFunction then script works fine for 1000 records but takes long time to order all data. 2. Is it possible to remove ordering from the grid and show default order list? Click one will sort data in ascending order, Click two will sort data in descending order and Click three will show the default order or remove ordering from the grid. Regards, Nischal Pathania From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of Matt Chotin Sent: Tuesday, October 11, 2005 20:53 To: flexcoders@yahoogroups.com Subject: RE: [flexcoders] date sort sortCompareFunction is meant for you controlling the sort regardless of whether you had a cell renderer. You just need the DataGridColumn. In your case since the data is already formatted using the labelFunction you may want the sortCompareFunction to work on the unformatted value. From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of [EMAIL PROTECTED] Sent: Friday, October 07, 2005 2:17 PM To: flexcoders@yahoogroups.com Subject: RE: [flexcoders] date sort Ya I have tried that but from I understand that only work when the date is from cell renderer. Mine is coming from a java object and is using label to format it. CONFIDENTIALITY STATEMENT - This message and any files or text attached to it are intended only for the recipients named above, and contain information that may be confidential or privileged. If you are not an intended recipient, you must not read, copy, use, or disclose this communication. Please also notify the sender by replying to this message, and then delete all copies of it from your system. Thank you. Matt Chotin [EMAIL PROTECTED] Sent by: flexcoders@yahoogroups.com 10/05/2005 05:27 PM Please respond to flexcoders@yahoogroups.com To flexcoders@yahoogroups.com cc Subject RE: [flexcoders] date sort If it's not working by default you may want to look into the sortCompareFunction on DataGridColumn. Matt From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of Joe Sent: Wednesday, October 05, 2005 2:33 PM To: flexcoders@yahoogroups.com Subject: [flexcoders] date sort Is there a way to sort a date field in a data grid that is using a labelfunction to get the date value. I have read that it can be done when using a cell renderer, but I do not want to change the code. Can this be done? Thanks. -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com SPONSORED LINKS Web site design development Computer software development Software design and development Macromedia flex Software development best practice YAHOO! GROUPS LINKS * Visit your group flexcoders on the web. * To unsubscribe from this group, send an email to: [EMAIL PROTECTED] * Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service. -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com SPONSORED LINKS Web site design development Computer software development Software design and development Macromedia flex Software development best practice YAHOO! GROUPS LINKS * Visit your group flexcoders on the web. * To unsubscribe from this group, send an email to: [EMAIL PROTECTED] * Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service
RE: [flexcoders] date sort
OK, the problem is that we end up executing the formatDate function and sorting those values instead of using your comparator functions on the fields as specified by the actual column. Heres a small example that will get you part of the way. Youll need to finish it out to get it sorting ascending and descending (for example the headerRelease functionality will need to be made more aware of what header you pressed to know if it should do anything). mx:Application xmlns:mx=http://www.macromedia.com/2003/mxml xmlns=* initialize=setup() mx:Script ![CDATA[ var dFormat:mx.formatters.DateFormatter; function setup():Void { dFormat = new mx.formatters.DateFormatter(); var dp:Array = []; for (var i:Number=0; i 1000; i++) { dp.push({feedbackCreationDate: new Date(Math.round(Math.random() * 2006), Math.round(Math.random() * 12), Math.round(Math.random() * 31))}); } dg.dataProvider = dp; } function sortGrid(a, b) { a = a.feedbackCreationDate.getTime(); b = b.feedbackCreationDate.getTime(); if (a == b) return 0; else if (a b) return -1; else return 1; } function formatDate(rowData):String { return (dFormat.format(rowData.feedbackCreationDate)); } ]] /mx:Script mx:DataGrid id=dg headerRelease=dg.dataProvider.sortItems(sortGrid) mx:columns mx:Array mx:DataGridColumn columnName=feedbackCreationDate headerText=Date labelFunction=formatDate sortOnHeaderRelease=false / /mx:Array /mx:columns /mx:DataGrid /mx:Application In answer to your second question there is currently not a way to remove the ordering once you start clicking on headers. You would need to have a copy of the data in the original order and then re-assign the dataProvider to that copy. Matt From: flexcoders@yahoogroups.com [mailto:flexcoders@yahoogroups.com] On Behalf Of Nischal Pathania Sent: Wednesday, October 12, 2005 9:01 AM To: flexcoders@yahoogroups.com Subject: RE: [flexcoders] date sort Everyone: I have used sortCompareFunction attribute of gridcolumn to resolve date sort issue in my application. Below is the part of my code . mx:DataGridColumn headerText=Date columnName=joinDate width=100 sortCompareFunction=sortGrid labelFunction=formatDate / . function sortGrid(a, b, index) { if (a == b) return 0; else if (a b) return -1; else return 1; } function formatDate(rowData):String { var dFormat = new mx.formatters.DateFormatter(); return (dFormat.format(rowData.feedbackCreationDate)); } 1. But now I'm facing a performance issue. My application is populating 1000 records in the grid and when I click on the header to sort grid on date order then it hangs the application and throw script error A script in this movie is causing Macromedia Flash Player 8 to run slowly. If continues to run, your computer may become unresponsive. Do you want to abort the script? Same script works fine if I populate with less number of records, say 100, in grid but then this takes more then 10 secs to sort data. Do we have any solution to this issue? Also, if I remove labelFunction then script works fine for 1000 records but takes long time to order all data. 2. Is it possible to remove ordering from the grid and show default order list? Click one will sort data in ascending order, Click two will sort data in descending order and Click three will show the default order or remove ordering from the grid. Regards, Nischal Pathania From: flexcoders@yahoogroups.com [mailto:flexcoders@yahoogroups.com] On Behalf Of Matt Chotin Sent: Tuesday, October 11, 2005 20:53 To: flexcoders@yahoogroups.com Subject: RE: [flexcoders] date sort sortCompareFunction is meant for you controlling the sort regardless of whether you had a cell renderer. You just need the DataGridColumn. In your case since the data is already formatted using the labelFunction you may want the sortCompareFunction to work on the unformatted value. From: flexcoders@yahoogroups.com [mailto:flexcoders@yahoogroups.com] On Behalf Of [EMAIL PROTECTED] Sent: Friday, October 07, 2005 2:17 PM To: flexcoders@yahoogroups.com Subject: RE: [flexcoders] date sort Ya I have tried that but from I understand that only work when the date is from cell renderer. Mine is coming from a java object and is using label to format it. CONFIDENTIALITY STATEMENT - This message and any files or text attached to it are intended only for the recipients named above, and contain information that may be confidential or privileged. If you are not an intended recipient, you must not read, copy, use, or disclose this communication. Please also notify the sender by replying to this message, and then delete all copies of it from your system. Thank you. Matt Chotin [EMAIL PROTECTED] Sent by: flexcoders@yahoogroups.com 10/05/2005 05:27 PM Please respond to flexcoders@yahoogroups.com
RE: [flexcoders] date sort
sortCompareFunction is meant for you controlling the sort regardless of whether you had a cell renderer. You just need the DataGridColumn. In your case since the data is already formatted using the labelFunction you may want the sortCompareFunction to work on the unformatted value. From: flexcoders@yahoogroups.com [mailto:flexcoders@yahoogroups.com] On Behalf Of [EMAIL PROTECTED] Sent: Friday, October 07, 2005 2:17 PM To: flexcoders@yahoogroups.com Subject: RE: [flexcoders] date sort Ya I have tried that but from I understand that only work when the date is from cell renderer. Mine is coming from a java object and is using label to format it. CONFIDENTIALITY STATEMENT - This message and any files or text attached to it are intended only for the recipients named above, and contain information that may be confidential or privileged. If you are not an intended recipient, you must not read, copy, use, or disclose this communication. Please also notify the sender by replying to this message, and then delete all copies of it from your system. Thank you. Matt Chotin [EMAIL PROTECTED] Sent by: flexcoders@yahoogroups.com 10/05/2005 05:27 PM Please respond to flexcoders@yahoogroups.com To flexcoders@yahoogroups.com cc Subject RE: [flexcoders] date sort If its not working by default you may want to look into the sortCompareFunction on DataGridColumn. Matt From: flexcoders@yahoogroups.com [mailto:flexcoders@yahoogroups.com] On Behalf Of Joe Sent: Wednesday, October 05, 2005 2:33 PM To: flexcoders@yahoogroups.com Subject: [flexcoders] date sort Is there a way to sort a date field in a data grid that is using a labelfunction to get the date value. I have read that it can be done when using a cell renderer, but I do not want to change the code. Can this be done? Thanks. -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com SPONSORED LINKS Web site design development Computer software development Software design and development Macromedia flex Software development best practice YAHOO! GROUPS LINKS Visit your group flexcoders on the web. To unsubscribe from this group, send an email to: [EMAIL PROTECTED] Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service. -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com SPONSORED LINKS Web site design development Computer software development Software design and development Macromedia flex Software development best practice YAHOO! GROUPS LINKS Visit your group "flexcoders" on the web. To unsubscribe from this group, send an email to:[EMAIL PROTECTED] Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
RE: [flexcoders] date sort
Ya I have tried that but from I understand that only work when the date is from cell renderer. Mine is coming from a java object and is using label to format it. CONFIDENTIALITY STATEMENT - This message and any files or text attached to it are intended only for the recipients named above, and contain information that may be confidential or privileged. If you are not an intended recipient, you must not read, copy, use, or disclose this communication. Please also notify the sender by replying to this message, and then delete all copies of it from your system. Thank you. Matt Chotin [EMAIL PROTECTED] Sent by: flexcoders@yahoogroups.com 10/05/2005 05:27 PM Please respond to flexcoders@yahoogroups.com To flexcoders@yahoogroups.com cc Subject RE: [flexcoders] date sort If its not working by default you may want to look into the sortCompareFunction on DataGridColumn. Matt From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of Joe Sent: Wednesday, October 05, 2005 2:33 PM To: flexcoders@yahoogroups.com Subject: [flexcoders] date sort Is there a way to sort a date field in a data grid that is using a labelfunction to get the date value. I have read that it can be done when using a cell renderer, but I do not want to change the code. Can this be done? Thanks. -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com SPONSORED LINKS Web site design development Computer software development Software design and development Macromedia flex Software development best practice YAHOO! GROUPS LINKS Visit your group flexcoders on the web. To unsubscribe from this group, send an email to: [EMAIL PROTECTED] Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service. -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com SPONSORED LINKS Web site design development Computer software development Software design and development Macromedia flex Software development best practice YAHOO! GROUPS LINKS Visit your group "flexcoders" on the web. To unsubscribe from this group, send an email to:[EMAIL PROTECTED] Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
RE: [flexcoders] date sort
If its not working by default you may want to look into the sortCompareFunction on DataGridColumn. Matt From: flexcoders@yahoogroups.com [mailto:flexcoders@yahoogroups.com] On Behalf Of Joe Sent: Wednesday, October 05, 2005 2:33 PM To: flexcoders@yahoogroups.com Subject: [flexcoders] date sort Is there a way to sort a date field in a data grid that is using a labelfunction to get the date value. I have read that it can be done when using a cell renderer, but I do not want to change the code. Can this be done? Thanks. -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com SPONSORED LINKS Web site design development Computer software development Software design and development Macromedia flex Software development best practice YAHOO! GROUPS LINKS Visit your group "flexcoders" on the web. To unsubscribe from this group, send an email to:[EMAIL PROTECTED] Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.