Ahhhhhhh... so then at the end to put the sorted list back in the
original and update the table

BOOKS = new ArrayList(thisList);
cellTable.setRowData(BOOKS);

Wow that makes sense. I knew it was something stupid. I understand why
John had this line above now:  List<T> newData = new
ArrayList(cellTable.getVisibleItems()); // Copy the data

On Feb 23, 2:11 pm, Greg Dougherty <[email protected]> wrote:
> Well, I'd start out by trying:
> public MySortHandler(List<Book> BOOKS, CellTable myCellTable,
> Column columnA, .... you get the picture) {
>          thisList = new ArrayList (BOOKS);
>          ......
>     }
>
> On Feb 23, 9:56 am, Josh K <[email protected]> wrote:
>
>
>
>
>
>
>
> > Ok, I got something working using the example you provided, but I
> > don't like how I implemented it. It wasn't hard, but everything I've
> > wanted to do in GWT so far has been easy, so this seems kind of
> > messy..
>
> > But, I guess trying to implement sorting using a ListSortHandler would
> > have been just as messy since I would have had to setComparator for
> > every column still right?
>
> > Also, this is probably a stupid Java error, but I'm trying to re-use
> > my SortHandler so I broke it into it's own class. In each composite
> > I've got a list of what is displayed in the tables, call it BOOKS.
> > What I've been trying to do is instantiate the SortHandler:
>
> > new MySortHandler (BOOKS, myCellTable, columnA, columnB, columnC,
> > etc..)
>
> > And in class I've got something like
> > public class MySortHandler {
> >     private List<Book> thisList;
>
> >     public MySortHandler(List<Book> BOOKS, CellTable myCellTable,
> > Column columnA, .... you get the picture) {
> >          thisList = BOOKS;
> >          ......
> >     }
>
> > Down below I sort thisList, and at the end, I assign it back to BOOKS
> > and do cellTable.setRowData(BOOKS);
>
> > When I go to sort though, nothing happens. I think I narrowed it down
> > to understand for some reason the list isn't getting copied over or
> > something like that? If I have MySortHandler as an internal private
> > class to my composite and I use the original List BOOKS, it sorts, but
> > when I try to do like I was doing above, it doesn't work.
>
> > Can anyone explain why, and give me an idea of how to fix it. I'll be
> > alright without code, just don't even know how to get around this. I'd
> > hate to have to stick an internal SortHandler at the end of each
> > composite.
>
> > On Feb 14, 12:19 pm, Josh K <[email protected]> wrote:
>
> > > What I was getting confused about doing it this way though is if I'm
> > > allowing the data to be sorted by 4 or 5 different columns, would I
> > > have to say something like:
>
> > > if (event.isSortAscending && nameColumn) {
> > >     Collections.sort(newData, nameAscComparator)} else if (nameColumn) {
>
> > >     Collections.sort(newData, nameDescComparator)} else if 
> > > (event.isSortAscending && timeRequestedColumn) {
>
> > >     Collections.sort(newData, timeRequestedAscComparator)
>
> > > } ....
>
> > > ya know where I have to have a different asc and desc comparator for
> > > each column and figure out which column was selected before I sort?
>
> > > I'm thinking that I'll have a small enough set of rows (probably max
> > > 100 rows at a time), that if I just make the columns sortable, it will
> > > be fine if I don't use paging. So maybe I should do what Greg
> > > mentioned and download all the data and use a ListDataProvider. What I
> > > liked about the AsyncDataProvider though is that people can change the
> > > value of a cell and hit enter and it's updated in the database because
> > > this will be an application a couple are using at one time all dealing
> > > with the same data so I need changes to show up on what other people
> > > are seeing.
>
> > > BTW, thanks a lot guys!
>
> > > On Feb 14, 10:00 am, John LaBanca <[email protected]> wrote:
>
> > > > If you are supporting paging, then a local sort will only sort the 
> > > > current
> > > > page, whereas a database sort would sort the data return the results 
> > > > for the
> > > > current page.  For example, if you are on the first page and do a 
> > > > reverse
> > > > sort, do you want to see all the names that start with z (database 
> > > > sort), or
> > > > do you want to see all of the names that start with a in reverse order
> > > > (local sort of the current page).
>
> > > > That being said, you can cache the values locally in a list and use
> > > > ListSortHandler.  Alternatively, you can add a ColumnSortEvent.Handler 
> > > > to
> > > > CellTable and copy and sort the return of CellTable#getVisibleItems().  
> > > > The
> > > > code would be something like the following:
>
> > > > cellTable.addColumnSortHandler(new ColumnSortEvent.Handler() {
> > > >   public void onColumnSort(ColumnSortEvent event) {
> > > >     List<T> newData = new ArrayList(cellTable.getVisibleItems()); // 
> > > > Copy
> > > > the data
> > > >     if (event.isSortAscending) {
> > > >       Collections.sort(newData, myAscComparator); // Sort ascending.
> > > >     } else {
> > > >       Collections.sort(newData, myDescComparator); // Sort descending.
> > > >     }
> > > >     cellTable.setRowData(cellTable.getVisibleRange(), newData);
> > > >   }
>
> > > > });
>
> > > > Thanks,
> > > > John LaBanca
> > > > [email protected]
>
> > > > On Mon, Feb 14, 2011 at 12:53 AM, Josh K <[email protected]> 
> > > > wrote:
> > > > > I've been developing an application in GWT that has data I've been
> > > > > displaying in a CellTable. I've set it up with a few TextColumns and a
> > > > > few EditTextColumns. I've got it set up to where if someone changes
> > > > > the data in an EditText cell, it sends an asynchronous request to the
> > > > > database and updates that row in the DB table. In short, I've got all
> > > > > this working using AsyncCallbacks and an AsyncDataProvider.
>
> > > > > Since 2.2 came out, I want to implement column sorting, kind of like
> > > > > is seen in this example:
> > > > >http://gwt.google.com/samples/Showcase/Showcase.html#!CwCellTable
> > > > > , but with an AsyncDataProvider. I want to sort the columns locally
> > > > > because I think it'd be faster than making an Async DB call again each
> > > > > time someone clicks to sort (which is the impression of what was
> > > > > supposed to happen if I used an AsyncHandler.
>
> > > > > So I THINK what I'm looking for is some way to use a ListHandler with
> > > > > an AsyncDataProvider?
>
> > > > > Can anyone shed some light on this? Maybe done it before or know the
> > > > > direction I'm supposed to? If it's even do-able?
>
> > > > > --
> > > > > You received this message because you are subscribed to the Google 
> > > > > Groups
> > > > > "Google Web Toolkit" group.
> > > > > To post to this group, send email to 
> > > > > [email protected].
> > > > > To unsubscribe from this group, send email to
> > > > > [email protected].
> > > > > For more options, visit this group at
> > > > >http://groups.google.com/group/google-web-toolkit?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to