Перемещение строк Angular/ts из одной сетки в другуюGrouped Row Grid

Вопрос или проблема

Я пытаюсь найти решение, чтобы перетаскивать строку из сетки 1 в сгруппированную строку в сетке 2.

Например:

Сетка 1 содержит информацию об адресе: Улица, номер, город

Сетка 2 содержит тип + информацию об адресе: Тип, улица, номер, город. Сетка 2 сгруппирована по типу, поэтому информация об адресе сгруппирована/привязана к конкретному типу.

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

Я пытался выяснить, возможно ли это с помощью версии Enterprise ag grid. К сожалению, я могу только найти, что можно перетаскивать строки в другую сетку и группировать строки. Но нет примера, как перетаскивать строки в сгруппированную строку. Насколько я знаю, вы можете только использовать applyTransaction для добавления/удаления, но не в сгруппированной строке.

Может кто-то поправить меня, если я не прав, и, возможно, предоставить пример того, как этого добиться?

Ответ или решение

Конечно! Для решения задачи перетаскивания строк с одной таблицы (Grid 1) на сгруппированную строку в другой таблице (Grid 2) с использованием ag-Grid, вам нужно будет реализовать несколько ключевых моментов. Важно отметить, что перетаскивание строк в сгруппированные ряды в ag-Grid поддерживается, но требует правильной настройки.

Шаги для реализации

  1. Настройка обеих таблиц: Убедитесь, что ваши таблицы (Grid 1 и Grid 2) правильно настроены для поддержки перетаскивания строк. Для этого вам необходимо будет включить функции rowDrag и rowDragManaged.

  2. Настройка Grid 1: В первой таблице добавьте колонку с настройкой rowDrag:

const gridOptions1 = {
    columnDefs: [
        { headerName: 'Street', field: 'street', rowDrag: true },
        { headerName: 'Number', field: 'number' },
        { headerName: 'City', field: 'city' }
    ],
    rowData: [
        { street: 'Main St.', number: '123', city: 'City A' },
        // другие адреса
    ],
    rowDragManaged: true,
    animateRows: true,
};
  1. Настройка Grid 2: Для второй таблицы нужно сгруппировать данные по типу. Позаботьтесь о том, чтобы включить настройку group в колонках.
const gridOptions2 = {
    columnDefs: [
        { headerName: 'Type', field: 'type', rowGroup: true },
        { headerName: 'Street', field: 'street' },
        { headerName: 'Number', field: 'number' },
        { headerName: 'City', field: 'city' }
    ],
    rowData: [
        { type: 'Type 1', street: 'Side St.', number: '456', city: 'City B' },
        // другие типы
    ],
    animateRows: true,
    onRowDragEnd: onRowDragEnd,
};
  1. Обработка события перетаскивания: Вам нужно создать функцию, которая будет обрабатывать перемещение строки из первой таблицы во вторую. В этой функции будет добавлено новое адресное значение в соответствующий сгруппированный тип. Пример реализации:
function onRowDragEnd(event) {
    const draggedData = event.node.data;
    const targetRowNode = event.overNode;

    if (targetRowNode && targetRowNode.group) { // Проверка, что перетаскиваем на сгруппированную строку
        const groupType = targetRowNode.data.type;

        // Создаем объект для добавления
        const newAddress = {
            type: groupType,
            street: draggedData.street,
            number: draggedData.number,
            city: draggedData.city
        };

        // Добавляем новый адрес в rowData Grid 2
        const gridApi2 = gridOptions2.api;
        gridApi2.applyTransaction({ add: [newAddress] });
    }
}
  1. Обновление данных: Не забудьте обновить данные в Grid 2, чтобы они отобразились корректно после перетаскивания.

Заключение

Таким образом, можно реализовать функциональность перетаскивания строк из одной таблицы в другую с учетом группировки. Данная реализация учитывает перетаскивание под сгруппированные строки, что позволяет динамически добавлять новые адреса к соответствующему типу. Убедитесь, что у вас установлена соответствующая версия ag-Grid, которая поддерживает указанные функции.

Оцените материал
Добавить комментарий

Капча загружается...