Сетка AG: отключите редактируемые строки, если не сохраните ту, которая редактируется.

У меня есть требование, согласно которому после редактирования строки в сетке ag нельзя разрешить редактирование другой строки, если эта строка не была сохранена.

есть ли способ добиться этого?

Я использую метод onRowClick ($ event) для проверки, образец указан ниже:

 onRowClick(event: any) {
        if (this.cellChangeCount === 0) {
            this.UnsavedNodeIndex = event.node.rowIndex;
            this.UnsavedNodeID=event.data.ID;
            console.log(event.node);
        }

        if (this.cellChangeCount !== 0 &&  (this.UnsavedNodeID!=event.data.ID )  && !this.newRowClicked) {

            if(typeof this.UnsavedNodeID !="undefined"){
            this.alertService.info("Save data first.");

            this.onBtStartEditing();
            }
        }
        if(this.newRowClicked==true   &&  (this.UnsavedNodeID!=event.data.ID )  ){
            this.gridApi.stopEditing();
            this.gridApi.setFocusedCell(0, 'ColName');
            this.gridApi.startEditingCell({
                rowIndex: 0,
                colKey: 'ColName',
            });
            this.gridApi.forEachNode(node=> node.rowIndex==0 ? node.setSelected(true) : node.setSelected(false))
        }
        this.cellChangeCount++
    }


 onBtStartEditing() {
        this.gridApi.stopEditing();
        this.gridApi.setFocusedCell(this.UnsavedNodeIndex, 'COlName');
        this.gridApi.startEditingCell({
            rowIndex: this.UnsavedNodeIndex,
            colKey: 'ColName',
        });
        this.gridApi.forEachNode(node=> node.rowIndex==this.UnsavedNodeIndex ? node.setSelected(true) : node.setSelected(false))
    }

на данный момент это работает, но я ищу какое-нибудь надежное решение, если оно есть. Спасибо


person Shreya Singh    schedule 12.05.2020    source источник


Ответы (1)


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

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

Итак, если, например, вы сохраняете «грязный» флаг, который вы устанавливаете при редактировании, и сбрасываете при сохранении, вы можете использовать

editable: () => return !this.dirty

Убедитесь, что вы используете функцию «толстая стрелка», как указано выше, иначе она может работать некорректно.

person GreyBeardedGeek    schedule 12.05.2020