2010-06-27 2 views
6

Я пытаюсь построить таблицу с большим набором данных и хотел бы избежать пейджинга. (Я хотел бы сделать что-то похожее на сетку электронной почты Yahoo, которая извлекает данные после рисования сетки. Я думаю, что изначально первые 100 писем извлекаются, а затем почта извлекается только после прокрутки пользователя)GWT 2.1 Виджеты представления данных без подкачки

Пример Виджет представления данных, который я видел, включает подкачку. Можно ли делать то, что я хочу?

редактировать: Можно также назвать эту таблицу бесконечный свиток,

ответ

1

Дин уже упомянул Ext GWT, но я хотел бы предложить SmartGWT's implementation.

+0

Ваша ссылка была неправильной, но я ее нашел в любом случае. Мне это нравится: http://www.smartclient.com/smartgwt/showcase/#featured_grid_live – Tihom

0

Да, это возможно. Раньше был пример того, что называется DynaGrid here, но эта ссылка сейчас мертва. Я не смог найти его где-нибудь еще (обратите внимание: это не то же самое, что и DynaGrid on SourceForge). Возможно, вы сможете связаться с автором, Рейниром Цвицерлотом, чтобы узнать о получении копии его DynaGrid. Вы также можете найти GWT Group, и если вы ничего не найдете, напишите там, где кто-нибудь еще знает, где его найти.

+0

Я попытался ищу dynagrid, но не смогли найти его. Кроме того, я хотел бы использовать виджет, который используется другими и поддерживается. Вот почему я хотел использовать виджет представления данных. – Tihom

0

Ext Gwt (AKA GXT) имеет реализацию «живой сетки», которая поддерживает эту функциональность (см. http://www.sencha.com/examples/explorer.html#livegrid). Код - GPL, хотя вы можете купить лицензию для использования в коммерческих приложениях.

4

Есть все Exemple этого в 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() { 
    } 
} 
Смежные вопросы