下拉列表未显示在剑道网格 detailInit 网格的所有行中

克里斯

在我的 detailInit 网格中向我的网格添加下拉列表时,我遇到了一个问题。当我选择一行时,下拉列表在那里,但是当我选择另一行时,下拉列表不会出现。

但是,如果我选择第三行,则会出现下拉列表,它们将出现在第二行和第一行中,但不会出现在第四行中。

为什么会发生这种情况以及如何修复它,以便无论我选择哪一行,所有行都将具有下拉列表?

var dropdownData = [{
    "CatalogID": 1,
    "NameVersion": "Catalog1"
  },
  {
    "CatalogID": 2,
    "NameVersion": "Catalog2"
  },
  {
    "CatalogID": 3,
    "NameVersion": "Catalog3"
  },
  {
    "CatalogID": 4,
    "NameVersion": "Catalog4"
  },
];

$(document).ready(function() {

  //#region Data

  var data2 = [{
      "RoomID": 1,
      "RoomName": "Room 1",
      "Areas": [{
        "id": 1,
        "AreaName": "Area 1"
      }, {
        "id": 10,
        "AreaName": "Area 10"
      }]
    },
    {
      "RoomID": 2,
      "RoomName": "Room 2",
      "Areas": [{
        "id": 2,
        "AreaName": "Area 2"
      }, {
        "id": 20,
        "AreaName": "Area 20"
      }]
    },
    {
      "RoomID": 3,
      "RoomName": "Room 3",
      "Areas": [{
        "id": 3,
        "AreaName": "Area 3"
      }, {
        "id": 30,
        "AreaName": "Area 30"
      }, {
        "id": 35,
        "AreaName": "Area 35"
      }]
    },
    {
      "RoomID": 4,
      "RoomName": "Room 4",
      "Areas": [{
        "id": 4,
        "AreaName": "Area 4"
      }, {
        "id": 40,
        "AreaName": "Area 40"
      }]
    }
  ];

  //#endregion

  ShowTabEditor(data2);
});

function ShowTabEditor(data) {
  $('#TabEditor').kendoGrid({
    dataSource: {
      data: data
    },
    schema: {
      model: "RoomID",
      fields: {
        RoomID: {
          editable: false,
          hidden: true
        },
        RoomName: {
          editable: false,
          type: "string",
          hidden: false
        },
        AreaCount: {
          editable: false,
          type: "number",
          hidden: false
        }
      }
    },
    columns: [{
        field: "RoomID",
        title: "RoomID",
        hidden: true
      },
      {
        field: "RoomName",
        title: "RoomName",
        hidden: false
      },
      {
        field: "AreaCount",
        title: "AreaCount",
        hidden: false
      }
    ],
    selectable: "row",
    //change: onTabEditorRowSelect,
    //detailTemplate: kendo.template($("#TabAreaTemplate").html()),
    detailInit: TabEditorDetailInit,
    detailExpand: function(e) {
      this.select(e.detailRow.prev());
      this.collapseRow(this.tbody.find('> tr.k-master-row').not(e.masterRow));
    }
  }).data("kendoGrid");
}

function TabEditorDetailInit(e) {
  //var masterRow = e.masterRow;
  //var roomID = e.data.RoomID;


  $("<div id='EditAreaGrid' />").appendTo(e.detailCell).kendoGrid({
    scrollable: true,
    sortable: true,
    selectable: "row",
    filterable: false,
    toolbar: kendo.template($("#EditAreaGridToolbarTemplate").html()),
    columns: [{
      title: "id",
      field: "id",
      hidden: true
    }, {
      field: "AreaName",
      title: "Area Name",
      width: "20px",
      template: "<div >#=AreaName #</div>"
    }, {
      title: "Catalog",
      field: "Catalog",
      template: "<input class='edit-area-catalog-dropdown' type='text' />",
      width: "40px",
      editable: false
    }],
    editable: {
      mode: "incell",
      confirmation: false
    },
    dataSource: {
      data: e.data.Areas,
      schema: {
        model: {
          fields: {
            id: {
              nullable: true
            },
            AreaName: {
              nullable: true,
              editable: true
            },
            Catalog: {
              editable: false
            }
          }
        }
      }
    },
    dataBound: function(e) {
      abindCatalogDropDownInCellProcess();
    }
  });
}

function abindCatalogDropDownInCellProcess() {
  $("#EditAreaGrid").data("kendoGrid").tbody.find("td input.edit-area-catalog-dropdown").each(function() {
    $(this).kendoDropDownList({
      dataTextField: "NameVersion",
      dataValueField: "CatalogID",
      optionLabel: "Select Catalog...",
      dataSource: {
        transport: {
          read: function(options) {
            if (dropdownData.length > 0) {
              options.success(dropdownData);
              return;
            }

            options.success(dropdownData);
          }
        }
      },
      select: function(e) {
        var grid = $("#EditAreaGrid").data("kendoGrid");
        var dataItem = grid.dataItem(grid.select());
        var drpDataItem = this.dataItem(e.item);
      }
    });
  });
}
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2018.1.221/styles/kendo.common.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2018.1.221/styles/kendo.rtl.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2018.1.221/styles/kendo.default.min.css">
<link rel="stylesheet" href="https://kendo.cdn.telerik.com/2018.1.221/styles/kendo.mobile.all.min.css">

<script src="https://code.jquery.com/jquery-1.12.3.min.js"></script>
<script src="https://kendo.cdn.telerik.com/2018.1.221/js/kendo.all.min.js"></script>

<script type="text/x-kendo-template" id="EditAreaGridToolbarTemplate">
  <button class="btn btn-sm btn-primary" id="btnAddNewArea"><i class="fa fa-plus"></i></button>
  <button id="btnDeleteArea" class="btn btn-sm btn-danger"><i class="fa fa-remove"></i></button>
</script>
<div id="TabEditor"></div>

桑德罗

您有多个具有相同 ID 的 DOM 元素,对于您创建具有相同 ID 的网格的每个细节单元格,因此在 dataBound 事件中您无法控制您选择的网格。

我认为,您应该将 detailCell 作为参数传递给 'abindCatalogDropDownInCellProcess' 函数以查找相应的输入,如下所示:

dataBound: function(w) {
      abindCatalogDropDownInCellProcess(e.detailCell);
    }
...

function abindCatalogDropDownInCellProcess(cell) {
  cell.find("td input.edit-area-catalog-dropdown").each(function(){})
}

工作示例

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何隐藏剑道Tooltip出现在detailInit(子网格)

Angular 2 Kendo网格中detailinit事件的替代方法

剑道网格行未显示

如何使用 Kendo detailInit 函数从另一个网格的不同行获取不同的网格作为子网格

剑道网格内联编辑删除我的下拉列表当前值

剑道下拉列表并在网格外部过滤

在剑道网格中显示值

为什么网格数据绑定网格的单元格中的下拉列表框未正确显示

Telerik KendoUI Angular2网格-页面大小下拉列表未更新网格中显示的记录项

监视网格:显示所有行

剑道网格按外部值突出显示所有列

使 CSS 网格中的一行跨越所有列

如何在剑道网格的 angular 8 下拉列表中绑定嵌套数组?

在剑道网格的选择功能中选择自定义下拉列表中的项目

剑道网格中未填充数据

CSS 网格最小跨度 3,如果类对象只是网格行中的对象,则填充行中的所有网格元素

如何隐藏/显示剑道网格

获取剑道网格中的修改字段列表?

空时在剑道网格中显示消息

突出显示在剑道网格中单击的按钮

剑道网格拖放中显示的幽灵图像

在剑道网格中显示条件图像

在剑道网格列中显示对象数组

如何禁用剑道下拉列表中的蓝色突出显示

单击保存所有按钮,从Angular平滑网格中获取所有已编辑的行

如何在asp的内建剑道网格中单击“编辑”按钮的同时在下拉列表中获取“选定项”

根据网格中的下拉选择使剑道单元只读

传递网格中在特定列中具有特定值的所有行

在Extjs的“网格选项”下拉菜单中,从网格中删除所有记录的选择