You can get the number of rows by calling `get-number` which is an 
inherited method from list-control<%>.  However, you probably want to keep 
the data separate from the list box and sort that: the list box always 
contains strings, but your data type might be a number and you want to sort 
it as such.

If you want to look at a possible implementation, I wrote a wrapper around 
list-box% for exactly the purpose of showing SQL query results in a 
list-box%.  It supports sorting, adding, deleting and updating individual 
rows, and you can also reorder and resize columns and this layout is saved 
and can be restored:

    
https://github.com/alex-hhh/ActivityLog2/blob/master/rkt/widgets.rkt#L982

The name of the class is `qresults-list%` and you can find usage examples 
of it throughout the application.

Best regards,
Alex.

On Tuesday, March 6, 2018 at 1:37:57 AM UTC+8, James wrote:
>
> I'm working on something which is leading to a cascade of questions so I 
> suppose that I should just start by explaining what I am trying to do.  I 
> have written some code which takes the results of an SQL query and displays 
> it as a table in a GUI using list-box%.  This works and I am now writing 
> the callback function.  One of the things I want it to do is sort the table 
> by a given column when you click on that column header.  As far as I can 
> tell, the way to do this is to get the contents of the table, sort it, and 
> put it back. The Racket Guide doesn't show any way to just get all the data 
> from the list-box% at once but you can get a row by index number.  Fine, so 
> I could loop through and get all the rows but how do I know how many rows 
> there are?  There isn't a way to get the number of rows directly but there 
> is a way to get the number of visible items in the list-box% so maybe I 
> could use that? 
>
> The message is: 
> (send a-list-box number-of-visible-items) 
>
> So, at this point, I have my callback just using this message to report 
> back the number of visible items when I click a column header.  I have a 4 
> x 8 table and it tells me that there are 35 items.  Where is this number 
> coming from?  Could it be a pair of opposite off-by-one errors and it 
> thinks I have a 5x7 table?   
>
> There are ways to get around the problem.  I could, for example, maintain 
> a parallel copy of the contents of the table but I want to write the most 
> generalizable code possible since I expect to do this kind of thing 
> repeatedly in different contexts.  It seems more reliable to work with the 
> actual data in the list-box%.   
>
> The bigger question is whether I am going about what I want to do the best 
> way in the first place.  Is list-box really what I want to use?  Is there a 
> better choice?  If not, should I work with someone to modify list-box to be 
> more accommodating to my use case? 
>
> James

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to