在onSelectRow中引用子网格?

时间:2011-04-26 11:59:11

标签: jqgrid

我有一个多选jqGrid,带有多选网格作为子网格。在父网格的onSelectRow事件中,如何获取对子网格的引用?

基本上,我需要做以下事情:

  1. 展开子网格(以便从服务器加载其数据)
  2. 获取对该子网格的引用
  3. 使用引用,循环遍历行并将每个行设置为选中(对于具有自己的嵌套子网格的行,这将触发它们的onSelectRow并重复该过程。不要担心,网格深度不超过3个。)
  4. 今天早上我正在查看各种documentation,但到目前为止还没有发现我需要做些什么来实现这一点。也许我只是错过了显而易见的事情?或者这可能需要更多的聪明才能?

    我看到上面的步骤3如何从getRowData()开始,并使用setSelection()循环结果。我在代码中使用其他代码并且它们工作得很好。但上面的步骤1和2是我现在陷入困境的地方。

    编辑:按照下面的@ Oleg的回答,我看了一下同步父网格的onSelectRow事件和subGridRowExpanded事件之间的工作。这是我正在测试的版本的简化版本:

    onSelectRow: function(id, status) {
      // Automatically expand the sub-grid (to load the data) and select the rows in that grid
      autoSelecting = true; // autoSelecting is a global variable normally set to false
      $('#mainGrid').expandSubGridRow(id);
    }
    subGridRowExpanded: function(subgrid_id, row_id) {
      //... build the sub-grid, works fine (an artifact of which is a subgrid_table_id)
      // If this grid was auto-expanded to be auto-selected, select all its rows
      if (autoSelecting) {
        var sdata = $('#' + subgrid_table_id).getRowData();
        for (var i = 0; i < sdata.length; i++) {
          $('#' + subgrid_table_id).setSelection(sdata[i].Id);
        }
        autoSelecting = false;
      }
    }
    

    当我修补这个时,发生了一些事情:

    • 如果我正在单步调试FireBug来调试它,那么选择和子选择都可以正常工作。但是,如果我拿出断点并实时尝试,则不会发生子选择。子网格扩展,但其行不会被选中。我觉得那里有个时间问题。
    • 我还没有考虑到级联的取消选择,显然。
    • 如果子网格已经展开,则选择不会级联。

1 个答案:

答案 0 :(得分:1)

loadComplete事件处理程序内部加载了网格,您可以执行一些其他操作,例如扩展某些行。

  • 您可以使用expandSubGridRow方法扩展子网格。
  • 要获得对子网格的引用,应首先创建子网格 。因此,引用网格的最佳位置是subGridRowExpanded事件。您没有发布您使用的JavaScript代码,因此很难更准确地描述。
  • 要选择所有行,您可以在循环中使用setSelection或使用$('.cbox', myGrid[0]).trigger('click');之类的代码。如何执行相同的操作还有其他不同的变体。如果您发现这里存在性能瓶颈,那么我可以描述如何更有效地完成这一步骤。

我可以重复一遍,最重要的是你在网格数据(或子网格数据)之后展开或选择行