【问题标题】:Vaadin Grid: Show all rowsVaadin Grid:显示所有行
【发布时间】:2015-06-01 08:19:24
【问题描述】:

如何使 Vaadin 7 中的新 Grid 小部件显示所有数据行(而不是滚动)?

【问题讨论】:

    标签: vaadin vaadin7 vaadin-grid


    【解决方案1】:

    高度模式

    首先你必须切换高度模式。您需要面向行的高度,而不是面向 CSS 的高度。

    myGrid.setHeightMode( HeightMode.ROW );
    

    然后您可以设置要显示的行数。您可以指定小数行,因为行数参数是双精度数。

    this.setHeightByRows( myDouble );
    

    避免零行

    因此,要显示所有行,请传递一个包含支持网格的行数的双精度数。但检查为零,因为 Grid 不允许没有行。如果您的容器中没有数据,请指定任意数量的空行。

    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 );
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多