Vaadin 网格:显示所有行
Vaadin Grid: Show all rows
如何让 Vaadin 7 中的新 Grid
小部件显示所有数据行(而不是滚动)?
高度模式
首先你得切换高度模式。您想要的不是面向 CSS 的高度,而是面向行的高度。
myGrid.setHeightMode( HeightMode.ROW );
然后您可以设置要显示的行数。您可以指定小数行,因为行数参数是双精度数。
this.setHeightByRows( myDouble );
避免零行
因此,要显示所有行,请传递一个双精度值,其中包含支持网格的行数。但是检查零,因为网格不允许没有行。如果您的容器中没有数据,请指定任意数量的空行。
int size = this.getContainerDataSource().size();
double rows = ( size > 0 ) ? size : myDefaultRowCount;
两行错误
在我自己的项目中,我 运行 遇到了 Vaadin 7.4.2 中的一个严重错误,其中将行数设置为 2(范围为 2.0d 到 2.7d)会导致高 CPU 负载页面部分加载但似乎永远不会结束时出现长达几分钟的延迟。我无法在示例应用程序中重现,但无法确定我自己的应用程序中的任何其他原因。作为一种变通方法,我的代码只是使用 3.0d
(或 2.8d
)来代替任何出现的 2.0d
。
if ( rows == 2.0d ) { rows = 2.8d; // Workaround for weird bug.
}
示例子类
这是 Grid 的一个子类,它为行集中的任何更改添加了一个侦听器。侦听器重置 Grid 的高度以显示所有新数据行。
package com.example;
import com.vaadin.data.Container;
import com.vaadin.shared.ui.grid.HeightMode;
/**
* Adds one feature to Grid: Automatically resize the height to show all
* rows.
*
* @author Basil Bourque.
* Released under ISC License, http://opensource.org/licenses/ISC
*/
public class GridAllRowsTall extends Grid
{
static double defaultRowsCount = 3.0d;
// -----| Constructors |-------------------------
public GridAllRowsTall ()
{
super();
this.initialize();
}
public GridAllRowsTall ( Container.Indexed dataSource )
{
super( dataSource );
this.initialize();
}
public GridAllRowsTall ( String caption )
{
super( caption );
this.initialize();
}
public GridAllRowsTall ( String caption , Container.Indexed dataSource )
{
super( caption , dataSource );
this.initialize();
}
// -----| Init |-------------------------
@Override
void initialize ()
{
// Add a listener so when the set of items changes, re-size the Grid to display all rows.
if ( this.getContainerDataSource() instanceof Container.ItemSetChangeNotifier ) {
Container.ItemSetChangeNotifier n = ( Container.ItemSetChangeNotifier ) this.getContainerDataSource();
n.addItemSetChangeListener( ( Container.ItemSetChangeEvent event ) -> {
this.showAllRows();
} );
}
}
// -----| Features |-------------------------
public void showAllRows ()
{
this.setHeightMode( HeightMode.ROW );
int size = this.getContainerDataSource().size();
double rows = ( size > 0 ) ? size : GridAllRowsTall.defaultRowsCount; // Cannot set height to zero rows. So if no data, set height to some arbitrary number of (empty) rows.
if ( rows == 2.0d ) {
rows = 3.0d; // Workaround for weird bug where a value of "2 rows" ( 2.0d - 2.7d ) causes a huge slowdown and major CPU load, and page never finishes updating.
}
this.setHeightByRows( rows );
}
}
如何让 Vaadin 7 中的新 Grid
小部件显示所有数据行(而不是滚动)?
高度模式
首先你得切换高度模式。您想要的不是面向 CSS 的高度,而是面向行的高度。
myGrid.setHeightMode( HeightMode.ROW );
然后您可以设置要显示的行数。您可以指定小数行,因为行数参数是双精度数。
this.setHeightByRows( myDouble );
避免零行
因此,要显示所有行,请传递一个双精度值,其中包含支持网格的行数。但是检查零,因为网格不允许没有行。如果您的容器中没有数据,请指定任意数量的空行。
int size = this.getContainerDataSource().size();
double rows = ( size > 0 ) ? size : myDefaultRowCount;
两行错误
在我自己的项目中,我 运行 遇到了 Vaadin 7.4.2 中的一个严重错误,其中将行数设置为 2(范围为 2.0d 到 2.7d)会导致高 CPU 负载页面部分加载但似乎永远不会结束时出现长达几分钟的延迟。我无法在示例应用程序中重现,但无法确定我自己的应用程序中的任何其他原因。作为一种变通方法,我的代码只是使用 3.0d
(或 2.8d
)来代替任何出现的 2.0d
。
if ( rows == 2.0d ) { rows = 2.8d; // Workaround for weird bug.
}
示例子类
这是 Grid 的一个子类,它为行集中的任何更改添加了一个侦听器。侦听器重置 Grid 的高度以显示所有新数据行。
package com.example;
import com.vaadin.data.Container;
import com.vaadin.shared.ui.grid.HeightMode;
/**
* Adds one feature to Grid: Automatically resize the height to show all
* rows.
*
* @author Basil Bourque.
* Released under ISC License, http://opensource.org/licenses/ISC
*/
public class GridAllRowsTall extends Grid
{
static double defaultRowsCount = 3.0d;
// -----| Constructors |-------------------------
public GridAllRowsTall ()
{
super();
this.initialize();
}
public GridAllRowsTall ( Container.Indexed dataSource )
{
super( dataSource );
this.initialize();
}
public GridAllRowsTall ( String caption )
{
super( caption );
this.initialize();
}
public GridAllRowsTall ( String caption , Container.Indexed dataSource )
{
super( caption , dataSource );
this.initialize();
}
// -----| Init |-------------------------
@Override
void initialize ()
{
// Add a listener so when the set of items changes, re-size the Grid to display all rows.
if ( this.getContainerDataSource() instanceof Container.ItemSetChangeNotifier ) {
Container.ItemSetChangeNotifier n = ( Container.ItemSetChangeNotifier ) this.getContainerDataSource();
n.addItemSetChangeListener( ( Container.ItemSetChangeEvent event ) -> {
this.showAllRows();
} );
}
}
// -----| Features |-------------------------
public void showAllRows ()
{
this.setHeightMode( HeightMode.ROW );
int size = this.getContainerDataSource().size();
double rows = ( size > 0 ) ? size : GridAllRowsTall.defaultRowsCount; // Cannot set height to zero rows. So if no data, set height to some arbitrary number of (empty) rows.
if ( rows == 2.0d ) {
rows = 3.0d; // Workaround for weird bug where a value of "2 rows" ( 2.0d - 2.7d ) causes a huge slowdown and major CPU load, and page never finishes updating.
}
this.setHeightByRows( rows );
}
}