Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据条件在列菜单选项的列中隐藏列_Javascript_Kendo Ui_Kendo Grid - Fatal编程技术网

Javascript 根据条件在列菜单选项的列中隐藏列

Javascript 根据条件在列菜单选项的列中隐藏列,javascript,kendo-ui,kendo-grid,Javascript,Kendo Ui,Kendo Grid,我正在为剑道网格使用剑道列菜单选项。我希望在通过第三个选项(即列)隐藏/显示列时,如果该列的标题为空,我希望隐藏菜单 这里我想隐藏RefValue4和RefValue5,因为它对应的值从数据库中为空。所以不需要显示它们 我是这样做的: if (grid.dataSource.data()[0].RefName4==null) { grid.hideColumn(18); } 但是无法实现结果。按照您在代码示例中的建议检查网格第一行的内容就足够了吗?如果是,您可以定义一个隐藏列的数据绑定

我正在为剑道网格使用剑道列菜单选项。我希望在通过第三个选项(即列)隐藏/显示列时,如果该列的标题为空,我希望隐藏菜单

这里我想隐藏RefValue4和RefValue5,因为它对应的值从数据库中为空。所以不需要显示它们

我是这样做的:

if (grid.dataSource.data()[0].RefName4==null) {
    grid.hideColumn(18);
}

但是无法实现结果。

按照您在代码示例中的建议检查网格第一行的内容就足够了吗?如果是,您可以定义一个隐藏列的数据绑定处理程序,如下所示:

dataBound : function (e) {
    // Get reference to the grid
    var grid = e.sender;
    // Get reference to received data
    var data = e.sender.dataSource.data();
    // Check that we actually received any data
    if (data.length > 0) {
        // Iterate on columns hiding those that in the first row have no data
        $.each(grid.options.columns, function (idx, elem) {
            if (!data[0][elem.field]) {
                grid.hideColumn(idx);
            }
        });
    }
}
只要您从服务器接收到数据,它就会运行,但正如我所说的,只检查第一个的内容,但您可以轻松地修改以检查所有内容。这没有实现的是从菜单中隐藏列标题

请参见此处的运行示例:

编辑:如果需要不显示没有数据的列,但也不显示在菜单中,则需要在网格中配置没有这些列的列。一旦收到数据,您可以在运行时执行以下操作:

// Fetch data from the DataSource
ds.fetch(function (d) {
    // By default, no column in the grid
    var columns = [];
    // List of available column definitions
    var definitions = [
        { field: "Id", hidden: true },
        { field: "FirstName", title: "First Name" },
        { field: "LastName", title: "Last Name" },
        { field: "City" },
        { field: "Position" }
    ];
    // For each column in the definition check if there is data
    $.each(definitions, function(idx, elem) {
        if(d.items[0][elem.field]) {
            // If there is data then copy the definition to columns
            columns.push(elem);
        }
    });
    // Use received data plus the columns definition computed
    $("#grid").kendoGrid({
        dataSource: d.items,
        editable  : false,
        pageable  : true,
        columnMenu: true,
        columns   : columns
    }).data("kendoGrid");
});
其中ds是数据源定义


请看这里:

嘿,非常感谢您在这方面的帮助!!!因为RefValue4在该列中没有任何值,所以我不想让用户单击该列。我们可以禁用它吗?我也不想隐藏该列。我想隐藏隐藏和显示列的选项,如果该列中没有数据,您不想在初始加载时隐藏该列,或者您想这样做,然后在菜单?抱歉,我想我无法让您理解该场景。请看,现在我有一个5选项,如RefValue1,…,Refvalue5。现在我的问题是RefValue4和Refvalue5列中没有数据,因此我只想向用户显示3个选项,即仅RefValue1,…,RefValue3