工具栏使用角度js在kendo网格中的列菜单

时间:2016-09-18 10:24:17

标签: kendo-grid uitoolbar datagridviewcolumn kendo-ui-grid kendo-contextmenu

如何在列表网格的工具栏中放置列菜单以根据需要选择列?

dataSource: $scope.kDisplayReceivedOrders,
            toolbar: ["save", "cancel",
                {
                    template:
                        '<button class="k-button k-button-icontext " ng-click="confirmReceivedOrder()" >Confirm</button>' +
                        '<button class="k-button "  ng-click="printReceivedOrderDetails()">Print</button>'
                }
            ],

1 个答案:

答案 0 :(得分:0)

您无法在工具栏中插入Kendo网格的columnMenu,因为Kendo将其添加到当前网格中。

但您可以做的是在您自己的工具栏中自行实现此菜单的行为。我最近为一个项目做了这件事。

我做了什么:

  • 角度分量。
  • 点击组件时,我会读到哪些列可见。
    • 我这样做了.getOptions(),然后检查返回的对象的columns属性。不可见的列将具有hidden=true
  • 然后在模板中,我会显示所有列,并带有一个复选框以切换可见性。
  • hideColumn()showColumn()应附加到选中或取消选中复选框的操作。

角度组件控制器:

init() {
 if(this.grid)
  this.columns = getColumns(this.grid.getOptions().columns);
}

checkbox(column) {
  column.visible === true ? this._objectViewService.grid.showColumn(column.field) : this._objectViewService.grid.hideColumn(column.field);
}

从kendo默认值转换为我的可视化系统的方法:

function getColumns(columns) {
 let cols = [];
 columns.forEach(column => cols.push({title: column.title, field:   column.field, visible: column.hidden !== undefined ? !column.hidden : true}));
 return cols;
}

模板:

<div class="columnDropdownComponent">
 <p class="title" ng-mouseover="$ctrl.init()">
  <button>Columns<span class="icon-navigation-down"></span></button>
 </p>
 <div class="dropdown">
  <div class="group">
   <label ng-repeat="column in $ctrl.columns" ng-class="{'checked': column.visible}">
    {{column.title}}
   <input type="checkbox" ng-model="column.visible" ng-click="$ctrl.checkbox(column)">
  </label>
 </div>
</div>