2010-06-27 5 views
6

J'essaye de construire une table avec un grand ensemble de données et je voudrais éviter la pagination. (Je voudrais faire quelque chose de similaire à la grille de Yahoo Mail qui récupère les données après que la grille est dessinée.Au début, les 100 premiers mails sont récupérés et le courrier n'est récupéré que lorsque l'utilisateur fait défiler)GWT 2.1 Présentation des données Widgets sans pagination

L'exemple du widget de présentation de données que j'ai vu inclure la pagination. Est-il possible de faire ce que je veux?

modifier: Vous pourriez aussi appeler cette une table de défilement infini

Répondre

1

Dean a déjà mentionné Ext GWT mais je voudrais également suggérer SmartGWT's implementation.

+0

Votre lien n'était pas correct mais je l'ai trouvé de toute façon. J'aime ça: http://www.smartclient.com/smartgwt/showcase/#featured_grid_live – Tihom

0

Oui, il est possible. Il y avait un exemple de cela appelé DynaGrid here mais ce lien est mort maintenant. Je n'ai pas pu le trouver ailleurs (note: ce n'est pas la même chose que le DynaGrid on SourceForge). Vous pourriez être en mesure de contacter l'auteur, Reinier Zwitserloot, pour s'enquérir de l'obtention d'une copie de son DynaGrid. Vous pouvez également rechercher le GWT Group et si vous ne trouvez rien, postez là demandant si quelqu'un d'autre sait où le trouver.

+0

J'ai essayé la recherche d'un dynagrid mais n'ont pas été en mesure de le trouver. En outre, je voudrais utiliser un widget qui est utilisé par d'autres et est maintenu. C'est pourquoi je voulais utiliser le widget de présentation de données. – Tihom

0

Ext Gwt (AKA GXT) dispose d'une implémentation d'un "Live Grid" qui prend en charge cette fonctionnalité (voir http://www.sencha.com/examples/explorer.html#livegrid). Le code est GPL bien que vous puissiez acheter une licence pour l'utiliser dans des applications commerciales.

4

Il y a un exemple de cela dans le GWT Showcase

/** 
* A scrolling pager that automatically increases the range every time the 
* scroll bar reaches the bottom. 
*/ 
public class ShowMorePagerPanel extends AbstractPager { 

    /** 
    * The default increment size. 
    */ 
    private static final int DEFAULT_INCREMENT = 20; 

    /** 
    * The increment size. 
    */ 
    private int incrementSize = DEFAULT_INCREMENT; 

    /** 
    * The last scroll position. 
    */ 
    private int lastScrollPos = 0; 

    /** 
    * The scrollable panel. 
    */ 
    private final ScrollPanel scrollable = new ScrollPanel(); 

    /** 
    * Construct a new {@link ShowMorePagerPanel}. 
    */ 
    public ShowMorePagerPanel() { 
    initWidget(scrollable); 

    // Handle scroll events. 
    scrollable.addScrollHandler(new ScrollHandler() { 
     public void onScroll(ScrollEvent event) { 
     // If scrolling up, ignore the event. 
     int oldScrollPos = lastScrollPos; 
     lastScrollPos = scrollable.getScrollPosition(); 
     if (oldScrollPos >= lastScrollPos) { 
      return; 
     } 

     HasRows display = getDisplay(); 
     if (display == null) { 
      return; 
     } 
     int maxScrollTop = scrollable.getWidget().getOffsetHeight() 
      - scrollable.getOffsetHeight(); 
     if (lastScrollPos >= maxScrollTop) { 
      // We are near the end, so increase the page size. 
      int newPageSize = Math.min(
       display.getVisibleRange().getLength() + incrementSize, 
       display.getRowCount()); 
      display.setVisibleRange(0, newPageSize); 
     } 
     } 
    }); 
    } 

    /** 
    * Get the number of rows by which the range is increased when the scrollbar 
    * reaches the bottom. 
    * 
    * @return the increment size 
    */ 
    public int getIncrementSize() { 
    return incrementSize; 
    } 

    @Override 
    public void setDisplay(HasRows display) { 
    assert display instanceof Widget : "display must extend Widget"; 
    scrollable.setWidget((Widget) display); 
    super.setDisplay(display); 
    } 

    /** 
    * Set the number of rows by which the range is increased when the scrollbar 
    * reaches the bottom. 
    * 
    * @param incrementSize the incremental number of rows 
    */ 
    public void setIncrementSize(int incrementSize) { 
    this.incrementSize = incrementSize; 
    } 

    @Override 
    protected void onRangeOrRowCountChanged() { 
    } 
} 
Questions connexes