【问题标题】:kendo freezed(locked) grid height剑道冻结(锁定)网格高度
【发布时间】:2017-03-27 09:28:14
【问题描述】:

我们正在使用一个带有一些锁定元素的网格。 我们使用 css 设置了网格的最小和最大高度。

.k-grid-content {
    max-height: 400px;
    min-height: 0px;
  }

我们在设置锁定网格的高度时遇到问题。如果我们不设置网格高度,锁定侧的一些行在底部会变白。 那么我们如何动态设置网格的高度呢?

这就是我们在 Onbound 事件中的内容

var grid = e.sender;
var lockedContent = grid.wrapper.children(".k-grid-content-locked")
var content = grid.wrapper.children(".k-grid-content");

if (content[0] && (content[0].scrollWidth == content[0].clientWidth))
    lockedContent.height(content.height());
else
    lockedContent.height(content.height()-16);
//16 is near to horizontal scroll height
grid.resize();

这是一个 hack,它不能像分组一样完美地工作。 我们已经通过这个链接 http://docs.telerik.com/kendo-ui/controls/data-management/grid/how-to/Layout/change-grid-height-when-using-frozen-columns 但它不起作用,因为它假定网格上根本没有设置高度。

有人可以提供正确的解决方案吗?

【问题讨论】:

    标签: javascript jquery angularjs kendo-ui


    【解决方案1】:

    我已经为你准备了一个道场来试试看是否适合你的场景

    http://dojo.telerik.com/eSava/2

    我所做的只是创建了一个为您完成所有繁重工作的函数。

        function initializeGrid(options)
    {
        if(options === null || options === undefined)
        {
            options = {
                size: 0.55,
                gridContentCss: ".k-grid-content",
                gridLockedContentCss: ".k-grid-content-locked",
                gridsToResize:[]
            };
        }
    
    
        var windowHeight = $(window).height() * options.size;
    
        if(options.gridsToResize !== null && options.gridsToResize.length > 0 )
        {
            options.gridsToResize.forEach(function (item) {
                var gridContent = $('#' + item + ' > ' + options.gridContentCss);
    
    
                var lockedContent = $('#' + item + ' > ' + options.gridLockedContentCss);
    
    
              //  console.log(gridContent, lockedContent);
    
                gridContent.height(windowHeight);
    
                if (lockedContent !== null && lockedContent !== undefined) {
                    lockedContent.height(windowHeight);
    
                }
            }); 
        }
        else 
        {
            var gridContent = $(options.gridContentCss);
            var lockedContent = $(options.gridLockedContentCss);
    
            gridContent.height(windowHeight);
    
            if (lockedContent !== null && lockedContent !== undefined) {
                lockedContent.height(windowHeight);
    
            }
        }
    
        $(window).resize(function () {
            ResizeGrid(options);
        });
    
    }
    

    在调用它的默认状态下,它会将所有网格的大小调整为窗口高度的 55%。

    但是如果你想应用不同的大小规则,你可以提供一个简单的变量,如下所示:

     var gridResize = {
                size: 0.4, 
                 gridContentCss: ".k-grid-content",
                gridLockedContentCss: ".k-grid-content-locked",
                gridsToResize:['grid']
              }
    
    
    initializeGrid(gridResize); 
    

    所以在上面的例子中,它将覆盖默认值并将网格大小调整为可用屏幕大小的 40%。此外,它只会使用网格 ID 调整控件的大小。因此,如果您同时在屏幕上有多个网格,则该功能将单独使用它们并保留那里的高度。

    任何问题让我知道。

    【讨论】:

    • 很好的解释!但我的情况有点不同,可能更简单。基本上对于我们所有的网格,我们都有 .k-grid-content { max-height: 400px; min-height: 0px;} 因此,如果数据较少,所有网格都会自动调整大小,而对于大数据,它是 400px 大小并分页。在其中一个使用锁定的网格中,我们想要类似的行为。但这需要设置网格高度,因此我们正在尝试以编程方式设置它。我已经提供了上面使用的代码,但它不能正常工作,可能是滚动高度有问题,因为我假设它为 16。
    • 我已经更改了我的代码,因此您现在可以使用百分比或像素高度作为选项:dojo.telerik.com/eSava/5 请注意,像素高度目前仅应用于内容部分,所以如果您想调整使整个网格设置为 400px 最大高度,然后您可以减去分组/寻呼机等的高度。
    • 但是高度不是可变的。在记录很少的情况下,网格需要调整。如果我们需要一个固定的高度,那么我认为我们可以在创建时简单地设置高度(比如 400)网格,这似乎工作正常。如果不冻结,我们的网格高度会在 minsize 和 maxsize 之间变化,并且我们希望使用 Freezed Grid 实现相同的高度。但是如果我们在某些情况下(例如很少的记录)不给出高度,则网格的冻结部分会在底部变白。
    猜你喜欢
    • 2013-12-15
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多