#javascript #ag-grid
#javascript #ag-сетка
Вопрос:
Я хочу выбрать одну строку в моей первой сетке, grid1
и функция event затем отфильтровала бы мою другую сетку grid2
на основе значений, найденных в выбранной строке. Я использую чистую версию библиотеки на javascript.
Что-то вроде
gridOptions:{
onRowSelected:my_event_filter_func,
rowData: [...],
columnDefs:[...]
}
grid1 = new agGrid.Grid(document.querySelector("#the_place"),gridOptions)
( grid2
определяется таким же образом на основе разных данных и без функции event)
где my_event_filter_func
находится
my_event_filter_func = function(event) {
let my_name = event.data.name
// filter grid2 to show only the rows where the 'name' column matches my_name
}
Приветствуется любая помощь.
Комментарии:
1. Можете ли вы получить данные из выбранных строк?
Ответ №1:
Я не могу дать вам построчный ответ, и я предполагаю, что вы сможете получить выбранные строки. Но что я могу предложить, так это то, что сначала вы создаете копию своих данных, которые находятся в вашей grid2.
function copyData() {
rowData = [];
gridApi.forEachNode(node => rowData.push(node.data));
// temp is the copy of your full data in grid2
temp = [...rowData];
}
Далее, на вашем my_event_filter_func
, вы можете отфильтровать строки, которые будут отображаться в grid2, на основе отфильтрованного значения из grid1.
function my_event_filter_func(event) {
let my_name = event.data.name
// get the rows that do not have the matching value
const rowsToBeRemoved = temp.filter(row => row['name'] !== my_name);
// remove the rows from grid2 that do not have the matching names
gridOptions.api.updateRowData({remove: rowsToBeRemoved});
}
Комментарии:
1. Спасибо, что потратили время. да, в итоге я сделал что-то подобное. Также опубликую свой ответ.
2. Приятно! Также хотелось бы увидеть ваше решение и посмотреть, как вы его реализуете. В настоящее время я делаю довольно много вещей с ag-grid, поэтому я пытаюсь учиться у как можно большего числа пользователей ag-grid. Что ж, если мой код полезен, был бы признателен, если бы вы могли проголосовать за 😉
Ответ №2:
Источником для двух сеток являются базовые данные для grid1
, так что это упростило мне жизнь. Если это не так, вам нужно сохранить ваши базовые данные для grid2
где-нибудь, чтобы вы могли получить к ним доступ при запуске события.
В итоге я объявил свои 2 сетки как глобальные переменные и использовал приведенную ниже функцию в качестве функции события :
var onSelectionChanged = function(event) {
let name = grid1.gridOptions.api.getSelectedRows()[0].name; // we know there is only one
let newRowData = grid1.gridOptions.rowData
.filter(x => x.name===name)
.map(x => {
return {
'name': x.name
// other fields...
}
})
// this overwrites grid2 data so need to save original data somewhere.
grid2.gridOptions.api.setRowData(newRowData);
grid2.gridOptions.api.refreshCells({force:true});
};