angular - 带有复选框列的 Kendo Angular 2 网格

标签 angular checkbox kendo-ui kendo-grid kendo-ui-angular2

我正在尝试在我的 Kendo Angular 2 网格中实现一列复选框。

我遵循文档中的示例(没有复选框): http://www.telerik.com/kendo-angular-ui/components/grid/data-binding/automatic-operations/#toc-custom-remote-directives

我更改了示例以添加列: http://plnkr.co/edit/hNkj1ZFZJopDyFxn59B3?p=preview

这是我的组件:

@Component({
selector: 'my-app',
template: `
    <kendo-grid 
        productsBinding
        [pageSize]="10"
        [pageable]="true"
        [sortable]="true"
        [height]="270">
      <kendo-grid-column field="checked" title="" width="50" [headerStyle]="{'text-align': 'center'}" [style]="{'text-align': 'center'}">
        <ng-template kendoGridHeaderTemplate let-dataItem>
          <md-checkbox
              class="check-column"
              [checked]="allItemsChecked"
              color="primary"
              (change)="checkAllClicked($event)">
          </md-checkbox>
        </ng-template>
        <ng-template kendoGridCellTemplate let-dataItem>
          <md-checkbox
              class="check-column"
              [checked]="dataItem.checked"
              color="primary">
          </md-checkbox>
        </ng-template>
    </kendo-grid-column>
    <kendo-grid-column field="ProductID" width="80"></kendo-grid-column>
    <kendo-grid-column field="ProductName"></kendo-grid-column>
    <kendo-grid-column field="UnitPrice" width="80" format="{0:c}"></kendo-grid-column>
    <kendo-grid-column field="UnitsInStock" width="80"></kendo-grid-column>
   </kendo-grid>
`
})
export class AppComponent {

  public allItemsChecked: boolean = false;

  checkAllClicked($event){
    console.log("checkAllClicked",$event);
    //TODO: implement...
  }
}

(在 Plunker 中你可以看到 ProductsBindingDirectiveProductsService 实现)

但现在我不确定单击标题中的复选框时更改所有项目的选中属性的最佳方法是什么...

我应该从网格中获取数据,更改所有项目中的属性并将其设置回去吗?或者还有其他我没有看到的选项?

最佳答案

我想我找到了一个类似但可能更简洁的解决方案:

使用“kendo-grid-checkbox-column”组件:

<kendo-grid-checkbox-column>
    <ng-template kendoGridHeaderTemplate let-dataItem>
        <input 
            type="checkbox" 
            name="selectAll"
            (change)="selectAllRows($event)" 
            [checked]="allRowsSelected"/>
    </ng-template>
</kendo-grid-checkbox-column>

kendo-grid 中的属性

[selectedKeys]="rowSelected"

[kendoGridSelectBy]="rowsSelectedKeys"

然后您可以在 Controller 中影响这些值:

private rowsSelected: number[] = [];

private rowsSelectedKeys(context: RowArgs): number {
    return context.dataItem.id;
}

private selectAllRows(e): void {
    if (e.target.checked) {
      this.allRowsSelected = true;
      this.rowsSelected = this.gridData.data.map(o => o.id);
    } else {
      this.allRowsSelected = false;
      this.rowsSelected = [];
    }
}

使用网格数据的优势在于,如果您有过滤器,那么它只会“检查”过滤后的数据。在我的示例中,您可以在任何事件上处理已检查行的 ID。

关于angular - 带有复选框列的 Kendo Angular 2 网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44001001/

相关文章:

javascript - 如何在asp.net中将下拉列表中的复选框的选定选项显示到文本框

javascript - Kendo Grid - 不允许编辑某些记录

jquery - Kendo UI Window.refresh({ data }) 未正确传递给 ASP.Net MVC 操作

kendo-ui - 剑道网格删除命令不起作用

javascript - Angular Material slider 24 小时格式化,步长为分钟

Angular ngOnChanges 和变化检测策略似乎是矛盾的?

html - 将焦点放在复选框上

javascript - 我想询问有关全部复选框/取消复选框的问题

angular - 在 Angular 5 应用程序中导入第三方 js 库 cq-prolyfill 的正确方法

javascript - 组件内的 Angular2 Html