【问题标题】:Resize last column in jqgrid调整 jqgrid 中最后一列的大小
【发布时间】:2012-06-02 14:03:14
【问题描述】:

jqgrid 中似乎有一个错误,其中一个can not resize the last column

这似乎是 2009 年提出的一个相当老的问题。我看了看,最新的 jqGrid 示例似乎有这个问题...... 然而,我发现最后一列可以拖动以调整网格本身的大小。 请参阅here 转到 3.6 中的新增功能部分。 如果这已经修复,任何指针。

【问题讨论】:

标签: jqgrid


【解决方案1】:

虽然您必须在“RTL 支持”示例中从右侧调整大小,但这对我来说也可以调整大小,这似乎是有道理的。

另外请注意,如果您使用的是 Chrome,则存在导致水平滚动条出现的 jqGrid 错误 - 请参阅 jqgrid-does-not-render-correctly-in-chrome-chrome-frame。此问题已得到解决,但演示页面尚未更新。而且它肯定会使最后一列的大小调整看起来不起作用,因为您必须一直滚动到右侧才能调整最后一列的大小。

【讨论】:

  • 经过进一步调查,我似乎明白你们在说什么。最后一列的大小仍然没有增加。所以我要做的是增加最后一列是减小其他列的大小。这在网格的右侧留下了一些空间,这给了我增加最后一列的空间。我认为这意味着最后一列只能增加到网格宽度,而所有其他列类型都在调整网格宽度......
  • 其实,如果你尝试一下,你会发现每次可以将最后一列的宽度增加一个像素左右。问题是水平滚动条不会随着宽度的增加滚动,所以你必须停下来滚动一个像素。您可以重复该过程以缓慢增加网格的宽度。执行您的建议并减小中间列的宽度,调整最后一列的宽度,然后再次调整中间列的大小,会更快。我同意所有这些都是乏味和不便的。
  • 感谢您抽出宝贵时间调查此问题。是的!这是一个非常乏味的。我会尝试调查是否可以为用户提供一些简洁的东西。
【解决方案2】:

我尝试使用 resizeStop 调整最后一列的大小,我像其他人所说的那样做了一些技巧。希望它有所帮助。

resizeStop(width, index) { var amGrid = $("#jsonmap"), colModel = $("#jsonmap").jqGrid('getGridParam','colModel'); var oW = $oldWidths[索引]; var cW = colModel[index+1].width+ downCalSize(oW,宽度); $oldWidths[index+1] = cW; $oldWidths[索引] = 宽度;

$('.ui-jqgrid-labels > th:eq('+(index+1)+')').css('width',cW); $('#jsonmap .jqgfirstrow > td:eq('+(index+1)+')').css('width',cW); var w = amGrid.jqGrid('getGridParam', 'width'); $('.ui-jqgrid-htable').css("宽度",w); $('.ui-jqgrid-btable').css("宽度",w); }

我仍在寻找一种通用的方式,可以在一页中处理多个表格并且不会相互影响。

【讨论】:

    【解决方案3】:

    看来我找到了解决办法。 只能在标题包装器 (div.ui-jqgrid-hbox) 的区域内调整最后一列的大小。在外层空间调整大小的过程中失去焦点。 由于存在一些默认为 20 像素的 padding-right 区域,因此只能在这小部分中增加大小。 此外,我们需要暂时取消 table wrapper 的影响,因为他也会导致停止调整大小的过程。

    这是我的解决方案。我假设您的表格包装器 ID 是 gbox_DataTable_u:

    1: CSS:定义新的宽边距区域:

    .ui-jqgrid .ui-jqgrid-hbox {float: left; padding-right: 10000px;}

    2: 将 2 个事件附加到您的网格中:

    resizeStart:function(event, index){ $('#gbox_DataTable_u').width($('#gbox_DataTable_u').outerWidth() + 10000);}

    resizeStop: function(width, index) {$('#gbox_DataTable_u').width($('#DataTable_u').outerWidth());}

    工作台示例:http://www.design.atplogic.co.il/aman/philips/users.htm#

    【讨论】:

      【解决方案4】:

      我发现最好的方法是在网格末尾添加一个不可调整大小的空列。 我只是在执行 jqgrid 构造函数之前通过扩展 colModel 手动进行。唯一的问题是 - 到目前为止,我无法让它不可拖动。

      这是一个例子:

      colModel.push({align: "left", editable: false, hidden: false, index: "ghostCol", label: " ", name: "ghostCol", resizable: false, sortable: false, type: "text", width: 50});
      

      希望这会有所帮助。

      【讨论】:

        【解决方案5】:

        经过 2 天的挣扎……我终于找到了解决方法。 似乎jqGrid在dragMove事件中计算了调整大小的对象,它使用传递的事件对象来获取鼠标的位置并计算调整列的新宽度。但是,当拖动超出网格边界时,dragMove 事件会停止拍摄... 所以我的解决方法是简单地修改 jqGrid 以在 dragEnd 事件中再次计算调整对象的大小。这是修改后的代码

        先找到dragEnd事件。

        ...
        dragEnd: function(e) { // add a new input parameter
        this.hDiv.style.cursor = "default";
        if(this.resizing) {
            this.dragMove(e); // call dragMove event to calculate resize object 
        ...
        

        然后找到触发dragEvent的mouseup事件...

        ...
        $(document).mouseup(function (e) { //  get the event object
        if(grid.resizing) { grid.dragEnd(e); return false;}// pass event to dragEnv
            return true;
        });
        ...
        

        然后列应该能够调整到鼠标指向的任何位置。
        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 2013-01-19
          • 2012-03-24
          • 2011-08-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多