当网格具有隐藏列时,在剑道网格(jQuery)上强制执行最小宽度

当网格具有隐藏列时,在剑道网格(jQuery)上强制执行最小宽度,jquery,css,kendo-ui,kendo-grid,Jquery,Css,Kendo Ui,Kendo Grid,我试图在剑道网格中为可调整大小的列强制执行最小宽度规则。我使用了他们提供的样品。在他们的示例中,所有列都显示出来。在我的例子中,有一些列是隐藏的。我有一个使用剑道道场的例子来说明我的问题。隐藏列之后的任何列不再保持最小宽度规则。我能想到的最好的情况是,这是jQuery的一个问题,它与设置为display:none的元素的交互 如果有一个解决办法来实现最小宽度,请让我知道。我似乎已经解决了您的问题,但移动到了隐藏列的位置 看看 这就是我们装载货物的方式 var grid = $("#Product

我试图在剑道网格中为可调整大小的列强制执行最小宽度规则。我使用了他们提供的样品。在他们的示例中,所有列都显示出来。在我的例子中,有一些列是隐藏的。我有一个使用剑道道场的例子来说明我的问题。隐藏列之后的任何列不再保持最小宽度规则。我能想到的最好的情况是,这是jQuery的一个问题,它与设置为
display:none的元素的交互


如果有一个解决办法来实现最小宽度,请让我知道。

我似乎已经解决了您的问题,但移动到了隐藏列的位置

看看

这就是我们装载货物的方式

var grid = $("#ProductGridName)").data("kendoGrid");
    for (var key in hiddenColumns) {
        var array = hiddenColumns[key].split(",");
        $.each(array, function (i) {
            grid.hideColumn(array[i].toString().split(" ").join(""));
        });
    }
但是在动态显示隐藏方面,再看一下同一url上的编辑,我也修改了本例中的代码以显示隐藏
columnMenu:true,

在返回并再次查看之后,我发现了这个问题。问题是当一列隐藏在剑道网格中时,
元素被设置为
style=“display:none;”
,但是
元素实际上被删除了。这意味着
元素的数量与
元素的数量不匹配,因此设置宽度时
的索引值处于禁用状态。要获得正确的索引,您必须获得整个
元素的
:visible
子集中
元素的索引

我很清楚,您希望能够调整列的大小,但具有最小宽度,对吗?是的,列仍应能够调整大小。当您查看示例时,第一列将允许您调整其大小,但它在最小宽度处停止。隐藏列(索引1)之后的任何列都将调整大小,使其尽可能小。您提供的Dojo链接仍然存在问题。调整列的大小时,只有第一个列会在最小宽度处停止。@Ricca在签出我的新编辑时,我也会将代码放在这里。tooThis似乎工作得更好,但不幸的是,它对我不起作用,因为我正在切换可见列和隐藏列。我没有在列定义中设置隐藏属性的选项。虽然我很感激你的努力,但这让我知道我没有疯,这是一种笨拙的行为。尽管这对我来说并不完美,但我还是把它标记为公认的答案,以防它对其他人有所帮助。我的项目可以在没有这个功能的情况下100%正常工作。我们在切换可见性方面也做了类似的事情,但我们使用的是剑道MVC。也许值得通过telerik或在他们的论坛上寻求支持。即使在他们的论坛上,他们的管理员也很活跃,并提供很好的答案
var grid = $("#" + gridName).data("kendoGrid");
var columns = grid.columns;
            var hiddenColumns = new Array();

$.each(columns,
      (idx, element) => {
          for (let key in element) {
              if (element.hasOwnProperty(key)) {
                  if (element.hidden !== 'undefined' && element.hidden) {
                     if (key === 'field') {
                         hiddenColumns.push(element[key]);
                         }
                     }
               }
         }
   });

     var jsonObj = {
     gridName: gridName,
     columns: hiddenColumns.join()
   }
   ... more code here that saves back to our DB via Ajax
var grid = $("#ProductGridName)").data("kendoGrid");
    for (var key in hiddenColumns) {
        var array = hiddenColumns[key].split(",");
        $.each(array, function (i) {
            grid.hideColumn(array[i].toString().split(" ").join(""));
        });
    }