用于Angular 2/4的KendoUI Grid中的批量编辑

时间:2017-05-30 16:29:40

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

根据此链接https://github.com/telerik/kendo-angular/issues/165无法使用角度2/4的kendo ui网格批量编辑。有没有人开发出一种解决方法?

1 个答案:

答案 0 :(得分:2)

<强>更新

请注意,现在看起来支持批量编辑。

原始回答

我能够改变kendo angular grid的自定义编辑功能,以实现与批处理/单元格编辑一致的功能。这是傻瓜。 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
}
}