2013-04-22 3 views
0

В настоящее время у меня есть CellTable, который я расширил фильтрами/поисковыми вызовами/сортировкой. Я также работаю над добавлением дополнительных функций.Строки заполнителя GWT в CellTable

Одна вещь, которая меня пугает, - это когда вы устанавливаете лимит для страницы, например, 10. Если объект не имеет 10 строк и имеет только 5, и вы переключаетесь между ними, тогда таблица будет прыгать вверх и вниз, если они расположены в центре.

Есть ли элегантный способ, когда для параметра pageSize установлено значение 10, а если в таблице меньше 10 строк, будут добавлены пустые строки?

Способы, которые я пробовал до сих пор, влияют на мою фильтрацию/сортировку/пейджинг, чего я не хочу.

EDIT 1:

final AsyncDataProvider<Row> provider = new AsyncDataProvider<Row>() { 

     @Override 
     protected void onRangeChanged(HasData<Row> display) { 

     int start = display.getVisibleRange().getStart(); 
     int end = start + display.getVisibleRange().getLength(); 
     end = end >= rows.getFilterList().size() ? rows.getFilterList().size() : end; 
     List<Row> sub = rows.getFilterList().subList(start, end); 
     System.out.println("Checking if extra rows needed: " + 
              table.getVisibleItems().size()); 

       for(int i = table.getVisibleItems().size(); i<10; i++){ 
        System.out.println("ADDED EMPTY ROW"); 
        sub.add(new Row()); 
       } 

     updateRowData(start, sub); 
    } 
}; 

ответ

1

У меня была такая же проблема. Я решил это, добавив строк. В принципе, вам необходимо переопределить onRangeChange(HasData<T> display) в вашем DataProvider, чтобы добавить null в список, представляющий интересующий диапазон. Вы добавляете достаточно null, чтобы заполнить нужный диапазон.

@Override 
protected void onRangeChanged(HasData<T> display){ 

    Range range = display.getVisibleRange(); 

    List<T> listOfObjects = getRange(range); 

    for(int i=listOfObject.size(); i<range.getLength(); i++){ 
     listOfObjects.add(null); 
    } 

    updateRowData(range.getStart(), listofObjects); 

} 

В приведенном выше коде getRange() возвращает список, содержащий объекты, которые запрашиваются (в пределах диапазона)

Вы также должны добавить некоторые CSS, чтобы дать высоту к строкам. Если вы не укажете высоту, то строки будут очень маленькими, чтобы они не заполнили всю таблицу.

Неутешительно, что GWT не поддерживает этот тип прокладки. Этот путь был лучшим, который я нашел, но, к сожалению, когда ваши высоты строк отличаются друг от друга, он делает все сложнее.

Paging

С решением выше вам нужно иметь пользовательские Pager если вы хотите подкачки. Вы можете расширить свой AsyncDataProvider с помощью метода, такого как getVisibleRowCount(), это вернет, сколько объектов в текущем подсписке на самом деле являются настоящими данными (не null). Тогда вы можете дать ссылку о AsyncDataProvider в Pager и переопределить метод createText():

@Override 
protected String createText(){ 

    return getPageStart() + " - " + dataProvider.getVisibileRowCount() + " of " 
       + dataProvider.getTotalRowCount(); 

} 
+0

эй я добавил код, который показывает, как я это сделал в настоящее время. Но это влияет на пейджинг, показывая 1-10, и это влияет на мой класс фильтра. Я думал, может быть, есть какой-то способ обойти это без обработки данных в таблице? – Sheogora

+0

Способ, который я предложил, не повлияет на поисковый вызов. Все, что вы делаете, это добавить нули, когда диапазон не выполнен. Вам нужно убедиться, что ваши столбцы знают, что делать с нулями (отображать пустую ячейку). – enrybo

+0

Я пробовал свой путь, и пейджер все равно скажет 1-10 даже если есть 5 строк с фактическими данными.Простой пейджер подключен к таблице ячеек, так как сколько угодно строк будет их считать? – Sheogora

Смежные вопросы