Сетка пользовательского интерфейса Kendo: выберите отдельную ячейку, верните элемент данных и предотвратите выделение определенных ячеек?

#kendo-ui #telerik #kendo-grid

#kendo-ui #telerik #kendo-grid

Вопрос:

У меня есть сетка пользовательского интерфейса Kendo, отображающая набор данных, и мне нужно иметь возможность выбирать определенные ячейки (ячейки в определенных столбцах), а при выборе возвращать элемент данных для строки, в которой находится выбранная ячейка, и свойство этого элемента данных, на который был нажат. Я не знаю, возможно ли это, но я работал над этим весь день и пришел к выводу, что мне нужна помощь.

Вот моя сетка и функция привязки к данным, которая в настоящее время возвращает мне элемент данных, но это все:

     var hhGrid = hhDiv.kendoGrid({
        dataSource: housing,
        scrollable: false,
        sortable: true,
        selectable: 'cell',
        columns: [
            { field: "Start", title: "Start", format: "{0:MM/dd/yyyy}", type: "date" },
            { field: "Stop", title: "Stop", format: "{0:MM/dd/yyyy}", type: "date" },
            { field: "Facility" },
            { field: "Area" },
            { field: "Pod" },
            { field: "Cell" },
            { field: "Comment" }
        ]
    }).data('kendoGrid');

    hhGrid.bind('change', grid_change);

function grid_change(e) {
    var selectedCells = this.select();
    var dataItem = this.dataItem(selectedCells[0].parentNode);
}
  

Итак, прежде всего, есть ли способ «отключить» выбор определенных столбцов в определении сетки? Я ничего не могу найти для этого. Я только хочу, чтобы пользователи могли выбирать ячейки в столбцах «Область», «Модуль» и «Ячейка». Если они нажмут на другие столбцы, ничего не должно произойти. Кроме того, когда они нажимают на эти выбранные ячейки, я хочу получить элемент данных для строки, в которой находится ячейка (что я в настоящее время могу сделать, используя этот метод grid_change), а также выбранный столбец или свойство в выбранном элементе данных.

Так, например, если пользователь нажимает на ячейку «Pod», я хочу знать, что была нажата именно ячейка pod, а другие данные для строки, в которой находится ячейка. Кажется, что все данные есть, так что это не должно быть так сложно, но я действительно изо всех сил пытаюсь найти данные, необходимые для этого.

Спасибо за вашу помощь!

Ответ №1:

Получение элемента данных:

 // Get selected cell
var selected = this.select();
// Get the row that the cell belongs to.
var row = this.select().closest("tr");
// Get the data item corresponding to this cell
var item = grid.dataItem(row);
  

Для получения имени столбца вы можете выполнить:

 // Get cell index (column number)
var idx = selected.index();
// Get column name from Grid column definition
var col = this.options.columns[idx].field;
  

Альтернативный метод получения поля, связанного со столбцами,:

 // Get column name from Grid column header data
var col = $("th", this.thead).eq(idx).data("field");       
  

Преимущество в том, что столбцы можно сортировать, это будет работать в любом случае.
Чтобы очистить выделение для столбцов, которые вам не нужны, просто нужно вызвать clearSelection() .

 if (col !== 'Area' amp;amp; col !== 'Pod' amp;amp; col !== 'Cell') {
    this.clearSelection();
}
  

Посмотрите пример здесь: http://jsfiddle.net/OnaBai/m5J9J/1 / и здесь: http://jsfiddle.net/OnaBai/m5J9J/2 / (использование заголовка столбца для получения имени столбца)

Комментарии:

1. после получения объекта cell, если мы хотим сделать его доступным только для чтения при определенных условиях и вернуть ему редактируемость при том же условии not, как мы можем это сделать?

2. это работает не так, как ожидалось. У меня есть сетка с 17 выбранными строками и режимом редактирования ячеек. The (this.tr (ближайший) возвращает все выбранные строки, а не текущую строку.