【问题标题】:Batch editing in KendoUI Grid for Angular 2/4Angular 2/4 的 Kendo UI Grid 中的批量编辑
【发布时间】:2017-05-30 16:29:40
【问题描述】:

根据此链接https://github.com/telerik/kendo-angular/issues/165 角度 2/4 的剑道 ui 网格的批量编辑不可用。有人开发了解决方法吗?

【问题讨论】:

    标签: angular user-interface kendo-ui kendo-grid


    【解决方案1】:

    更新

    请注意,现在似乎支持开箱即用的批量编辑。

    原始答案

    我能够更改剑道角度网格的自定义编辑功能,以实现与批处理/单元格编辑一致的功能。这是plunkr。 http://plnkr.co/edit/USYz7LIV5oaOmjSmY7JH

    import { Component, OnInit, Inject, ViewChild } from '@angular/core';
    import { FormGroup, FormControl, Validators } from '@angular/forms';
    import { ProductsService } from './products.service';
    import { categories } from './categories';
    
    @Component({
    selector: 'my-app',
    template: `
        <kendo-grid
          #grid
          [data]="gridData"
          [height]="410"
          >
            <ng-template kendoGridToolbarTemplate>
              <button *ngIf="!isEditMode" (click)="editHandler()" class="k-button k-primary">Edit</button>
              <button *ngIf="isEditMode" (click)="saveHandler()" [disabled]="!canSave()" class="k-button">Update</button>
              <button *ngIf="isEditMode" (click)="cancelHandler()" class="k-button">Cancel</button>
            </ng-template>
            <kendo-grid-column field="ProductName" title="Name" width="200">
            </kendo-grid-column>
            <kendo-grid-column field="UnitPrice" title="Price" format="{0:c}" width="80" editor="numeric">
            </kendo-grid-column>
            <kendo-grid-column field="UnitsInStock" title="In stock" width="80" editor="numeric">
            </kendo-grid-column>
        </kendo-grid>
    `
    })
    
    export class AppComponent implements OnInit {
    public gridData: any[];
    public formGroups: FormGroup[] = [];
    public isEditMode: Boolean = false;
    @ViewChild('grid') grid;
    
    constructor(private service: ProductsService) {
    }
    
    public ngOnInit(): void {
        this.gridData = this.service.products();
    }
    
    public editHandler() {
        this.isEditMode = true; // Start editing
        for (let rowIndex = 0; rowIndex < this.gridData.length; rowIndex++) {
            this.grid.closeRow(rowIndex);
    
            let dataItem = this.gridData[rowIndex];
    
            this.formGroups[rowIndex] = new FormGroup({
              'ProductName': new FormControl(dataItem.ProductName, Validators.required),
              'UnitPrice': new FormControl(dataItem.UnitPrice),
              'UnitsInStock': new FormControl(dataItem.UnitsInStock, Validators.compose([Validators.required, Validators.pattern('^[0-9]{1,2}')]))
            });
    
            this.grid.editRow(rowIndex, this.formGroups[rowIndex]);
        }
    }
    
    public canSave() {
        return this.formGroups.every(f => f.valid);
    }
    
    public saveHandler(): void {
        for (let rowIndex = 0; rowIndex < this.gridData.length; rowIndex++) {
            const editedDataItem: any = this.formGroups[rowIndex].value;
            let dataItem: any = this.gridData[rowIndex];
    
            dataItem.ProductName = editedDataItem.ProductName;
            dataItem.UnitPrice = editedDataItem.UnitPrice;
            dataItem.UnitsInStock = editedDataItem.UnitsInStock;
            this.grid.closeRow(rowIndex);
        }
    
        // Call an api on server side to update the values here, as the update only does an in-javascript objects update.
    
        this.formGroups = []; // Reset all
        this.isEditMode = false; // Finish editing
    }
    
    public cancelHandler() {
        for (let rowIndex = 0; rowIndex < this.gridData.length; rowIndex++) {
            this.grid.closeRow(rowIndex);
        }
    
        this.formGroups = []; // Reset all
        this.isEditMode = false; // Finish editing
    }
    }
    

    【讨论】:

    猜你喜欢
    • 2017-08-14
    • 2014-05-28
    • 1970-01-01
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多