2013-06-14 2 views
1

У меня есть сетка кендо с именем файла и флажок в виде столбцов. Каждая строка имеет имя файла и флажок. Я хочу удалить строки, которые отмечены щелчком по кнопке.Удаление строк, проверенных в сетке кендо

Я использовал следующий код внутри функции onclick.

$.each(grid.dataSource.view(), function() { 
       var currentDataItem = grid.dataItem(grid.select()); 
       var dataRow = grid.dataSource.getByUid(currentDataItem.uid); 
       grid.dataSource.remove(dataRow); 

      }); 

Но, я получаю исключение javascript, например, uid undefined. Пожалуйста, помогите мне уйти от этого.

Редактировать: Возможность удалять строки за строкой. Невозможно удалить несколько строк одним выстрелом. Кроме того, когда я загружаю с помощью загрузки kendo снова после удаления, все файлы, ранее удаленные, загружаются в одну попытку.

Благодаря Manikandan

ответ

1

Три вопроса:

Если вы итерацию grid.dataSource.view() вы найдете только те элементы, которые находятся в текущей странице сетки. Если вы хотите выполнить итерацию по всем элементам таблицы, вместо этого вы можете использовать grid.dataSource.data().

Итерируя, вам не нужно указывать select строку, поскольку у вас уже есть информация в вашей функции. Например, если вы:

$.each(grid.dataSource.view(), function(idx, elem) { 
    console.log("item with index " + idx + " is ", elem); 
}) 

затем elem это элемент в ряду idx.

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

Пример: Если у вас есть следующий код:

var array = [3, 2, 1, 5, 6, 4]; 
console.log("before", array); 
$.each(array, function(idx, elem) { 
    if (elem >= 5) { 
     array.splice(idx, 1); 
    } 
}); 
console.log("after", array); 

будет отображаться:

before [3, 2, 1, 5, 6, 4] 
after [3, 2, 1, 6, 4] 

элемент со значением 6 не был удален !!!

Вы должны сделать, вместо этого, начать с конца:

var array = [3, 2, 1, 5, 6, 4]; 
console.log("before", array); 
var len = array.length; 
while (len--) { 
    if (array[len] >= 5) { 
     array.splice(len, 1); 
    } 
} 
console.log("after", array); 

получают в результате:

before [3, 2, 1, 5, 6, 4] 
after [3, 2, 1, 4] 

Таким образом, ваш код должен быть:

var array = grid.dataSource.data(); 
var len = array.length; 
while (len--) { 
    if (...) { // the condition for checking if the item has the checkbox ticked 
     grid.dataSource.remove(array[len]); 
    } 
} 
+0

Я могу определить условие, чтобы найти отмеченные флажки. Я попытался, если ($ ("# GridUploadstaffIDs1"). Find ("input: checked")), но это становится истинным для всех строк. Как действовать сейчас? – Manikandan

+0

Мне нужно будет увидеть ваш код, чтобы узнать, что не так **, но **, тогда у вас будет проблема с тем, что вы удалите строки, начиная с конца. Почему бы не зациклиться на элементах данных? Поскольку это чистый JavaScript и не требует jQuery, он, скорее всего, будет намного быстрее! – OnaBai

+0

Это часть кода, которая удаляет проверенные строки. var grid = $ ('# GridUploadstaffIDs1'). data ("kendoGrid"); var array = grid.dataSource.data(); var len = array.length; while (len--) {if ($ ("# GridUploadstaffIDs1"). find ('input: checked')) {grid.dataSource.remove (array [len]); }} – Manikandan

2
/Iterate through all the tr in grid 
$.each(grid.find('tr'), function (item,index) { 
      //check if the tr has a checked checkbox, you can be more specific here if you have multiple checkboxes in tr. 
      if(item.children('input[type=checkbox].is(':chekced')) 
      { 
      grid.dataSource.remove(item); 
      } 
     }); 

Несколько вещей, которые я хочу поделиться:

  1. Вы не можете удалять несколько строк сразу, не пробегаем по сетке данных/просмотр/строк
  2. Чтобы удалить строку, вам не нужно копать источник данных и получить DataItem, вы можете сразу удалить его на основе «тр» (Элементы DOM)
  3. Если он говорит, что Uid не определен, проверьте источник вашей рендеринговой сетки, он должен иметь атрибут «data-uid», прикрепленный к каждому tr. Если нет, вы не указали модальность правильно.
  4. После удаления, если он все еще загружает изменения, вы можете вызвать метод saveChanges для источника данных сетки, чтобы заморозить сделанные вами изменения.
Смежные вопросы