2016-02-10 2 views
7

У меня есть сетка ag, где я пытаюсь удалить строку ... Я могу удалить строку из источника данных с помощью техники «сращивания», после чего я хочу обновить таблицу. Но она показывает ошибку. Это код, который я использую, чтобы удалить строкуКак обновить/обновить ag-сетку после удаления строки?

selectedvalue={} //this holds the selected row value 
rowData=[]; //this holds all the row data 
onRowSelected(event) { 
    this.selectedvalue = event; 
} 
deletebtn() { 
    for (let i = 0; i < this.rowData.length; i++) { 
     if (this.selectedvalue.node.data.make === this.rowData[i].make) { 
      this.rowData.splice(i, 1); 
      this.gridOptions.api.refreshView(); 
     } 
    } 
} 

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

ответ

14

Вы должны установить строки в сетке снова: после сращивания:

gridOptions.api.setRowData(gridOptions.rowData) 

Может быть, это plunkr помогает https://plnkr.co/0k4sYa

Автор серебряно-сетки объясняет это в форуме

AG-сетки
+0

Можете ли вы предоставить ссылку на форум ag-grid, где это объясняется? Я зарегистрировался, но я не являюсь пользователем Enterprise, поэтому, возможно, поэтому я не могу правильно искать это объяснение. –

+1

Я тоже не являюсь пользователем предприятия. Но вы все равно можете искать форум без него. Нравится этот https://ag-grid.com/forum/showthread.php?tid=3726&pid=8876&highlight=setRowData#pid8876 –

+0

Спасибо! Мне не удалось найти это на форумах, но оказалось, что ответ не совсем обновлен. См. Ответ от @ user3294566 ниже. Тем не менее, ваш ответ верен для версий agGrid в начале 2016 года; более новые версии имеют гораздо лучшие API-вызовы, чтобы легко выполнить удаление строки и последующего обновления. –

4

Для повышения производительности используйте вызовы grid api для добавления/удаления строк.
Чтобы вставить строку в начале, то есть копия выбранной строки:

var rowData = JSON.parse(JSON.stringify(selectedNode.data)); 
gridOptions.api.insertItemsAtIndex(0, [rowData]); 

Чтобы удалить выбранную строку:

var selectedNodes = gridOptions.api.getSelectedNodes(); 
gridOptions.api.removeItems(selectedNodes); 

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

Пожалуйста, обратитесь к документации для деталей api.
https://www.ag-grid.com/javascript-grid-insert-remove/

+0

Вы не используете 'newRow' в любом месте вставки ... вместо этого у вас есть' rowData'. Думаю, вам нужно это изменить. –

+1

Исправлено, спасибо за проверку. – user3294566

+0

Спасибо за ваш ответ! Хотя теперь мне очевидно, что в середине 2017 года произошли изменения в работе agGrid - первоначальный вопрос был задан в 2016 году - и у меня на самом деле была устаревшая версия agGrid, где ваш собственный ответ (что верно для текущая версия agGrid!) не работала, то есть консоль JS получила некоторые ошибки для отсутствия функций API. В самом деле, вы отвечаете (что я имею в виду :-)) - это более правильный, современный метод для выполнения того, что задал ОП, - нет необходимости * пересылать * все * строки снова в agGrid, так как это казалось, было в начале 2016 года. –