列菜单项列表自定义
Column menu items list customization
目前,我正在研究 Angular 2 的 SyncFusion 网格 syncfusion-ej2 并发现了一个很棒的功能 - 打开列菜单以将所有控件(排序、分组、过滤器)集中在一个地方。
但这还不足以满足我的需求,我正在寻找自定义列菜单中项目列表的方法,例如我希望能够添加带有自定义操作的项目,以响应 click/select 用户操作。
比如我想添加一个项目来直接隐藏当前列或者固定这个列。
能否请您告诉我是否可行以及如何实现?或者我应该为此操作创建一个自定义组件?
提前致谢。
好吧,伙计们,我在正确的文档的 TypeScript 部分找到了我的问题的解决方案 here
不幸的是,它现在不能像演示中那样工作。但他们说已经 fixed 这个问题,发布日期是今天,2018 年 1 月 10 日。
这是一个有效的 example TypeScript 版本。
</p>
<pre><code>import { Grid, ColumnMenu, Sort, Page } from '@syncfusion/ej2-grids';
import { MenuEventArgs } from '@syncfusion/ej2-navigations';
import { data } from './datasource.ts';
Grid.Inject(ColumnMenu, Page, Sort);
// The problem is in the base constant value
// columnMenuClick should have a value "columnMenuClick"
// but it has a value "contextMenuClick" like contextMenuClick constant for context menu
let grid: Grid = new Grid({
dataSource: data,
allowPaging: true,
allowSorting: true,
showColumnMenu: true,
columnMenuItems:[{text:'Clear Sorting', id:'gridclearsorting'}],
contextMenuClick: function(args: MenuEventArgs){
if(args.item.id === 'gridclearsorting'){
grid.clearSorting();
}
},
sortSettings:{
columns:[{direction: "ascending", field: "OrderID"}]
},
columns: [
{ field: 'OrderID', headerText: 'Order ID', width: 200, textAlign: 'right', showInColumnChooser: false },
{ field: 'Freight', width: 150, format: 'C2', textAlign: 'right', editType: 'numericedit' },
{ field: 'ShipName', headerText: 'Ship Name', width: 300 },
{ field: 'ShipCountry', headerText: 'Ship Country', visible: false, width: 200 },
{ field: 'ShipCity', headerText: 'Ship City', width: 200 }
]
});
grid.appendTo('#Grid');
这是 Angular 4 版本的工作 example。
</p>
<pre><code>import { Component, OnInit, ViewChild } from '@angular/core';
import { SortService, ResizeService, GroupService, ColumnMenuService, PageService, FilterService } from '@syncfusion/ej2-ng-grids';
import { ContextMenuItem, GroupSettingsModel, FilterSettingsModel, EditSettingsModel, ColumnMenuItemModel } from '@syncfusion/ej2-ng-grids';
import { GridComponent } from '@syncfusion/ej2-ng-grids';
import { MenuEventArgs } from '@syncfusion/ej2-navigations';
import { data } from './data';
@Component({
selector: 'control-content',
templateUrl: 'columnmenu.html',
})
export class ColumnMenuComponent implements OnInit {
public data: Object[];
public groupOptions: GroupSettingsModel;
public filterSettings: FilterSettingsModel;
public columnMenuItems: ColumnMenuItemModel[];
@ViewChild('grid')
public grid: GridComponent;
ngOnInit(): void {
this.data = data.slice(0, 60);
this.groupOptions = { showGroupedColumn: true };
this.filterSettings = { type: 'checkbox' };
this.columnMenuItems = [{text:'Clear Sorting', id:'gridclearsorting'}];
}
public columnMenuClick(args: MenuEventArgs): void {
console.log('123');
if(args.item.id === 'gridclearsorting'){
this.grid.clearSorting();
}
}
}
Essential JS 2 Grid v 15.4.24 已经发布,其中包含“上下文菜单事件触发”的问题修复。请找到下面的工作 plunker 示例。
columnMenuClick(args){
if(args.item.id === 'gridclearsorting'){
this.grid.clearSorting();
}
}
在该示例中,我们添加了自定义列菜单选项以清除网格排序。
目前,我正在研究 Angular 2 的 SyncFusion 网格 syncfusion-ej2 并发现了一个很棒的功能 - 打开列菜单以将所有控件(排序、分组、过滤器)集中在一个地方。
但这还不足以满足我的需求,我正在寻找自定义列菜单中项目列表的方法,例如我希望能够添加带有自定义操作的项目,以响应 click/select 用户操作。
比如我想添加一个项目来直接隐藏当前列或者固定这个列。
能否请您告诉我是否可行以及如何实现?或者我应该为此操作创建一个自定义组件?
提前致谢。
好吧,伙计们,我在正确的文档的 TypeScript 部分找到了我的问题的解决方案 here
不幸的是,它现在不能像演示中那样工作。但他们说已经 fixed 这个问题,发布日期是今天,2018 年 1 月 10 日。
这是一个有效的 example TypeScript 版本。
</p>
<pre><code>import { Grid, ColumnMenu, Sort, Page } from '@syncfusion/ej2-grids';
import { MenuEventArgs } from '@syncfusion/ej2-navigations';
import { data } from './datasource.ts';
Grid.Inject(ColumnMenu, Page, Sort);
// The problem is in the base constant value
// columnMenuClick should have a value "columnMenuClick"
// but it has a value "contextMenuClick" like contextMenuClick constant for context menu
let grid: Grid = new Grid({
dataSource: data,
allowPaging: true,
allowSorting: true,
showColumnMenu: true,
columnMenuItems:[{text:'Clear Sorting', id:'gridclearsorting'}],
contextMenuClick: function(args: MenuEventArgs){
if(args.item.id === 'gridclearsorting'){
grid.clearSorting();
}
},
sortSettings:{
columns:[{direction: "ascending", field: "OrderID"}]
},
columns: [
{ field: 'OrderID', headerText: 'Order ID', width: 200, textAlign: 'right', showInColumnChooser: false },
{ field: 'Freight', width: 150, format: 'C2', textAlign: 'right', editType: 'numericedit' },
{ field: 'ShipName', headerText: 'Ship Name', width: 300 },
{ field: 'ShipCountry', headerText: 'Ship Country', visible: false, width: 200 },
{ field: 'ShipCity', headerText: 'Ship City', width: 200 }
]
});
grid.appendTo('#Grid');
这是 Angular 4 版本的工作 example。
</p>
<pre><code>import { Component, OnInit, ViewChild } from '@angular/core';
import { SortService, ResizeService, GroupService, ColumnMenuService, PageService, FilterService } from '@syncfusion/ej2-ng-grids';
import { ContextMenuItem, GroupSettingsModel, FilterSettingsModel, EditSettingsModel, ColumnMenuItemModel } from '@syncfusion/ej2-ng-grids';
import { GridComponent } from '@syncfusion/ej2-ng-grids';
import { MenuEventArgs } from '@syncfusion/ej2-navigations';
import { data } from './data';
@Component({
selector: 'control-content',
templateUrl: 'columnmenu.html',
})
export class ColumnMenuComponent implements OnInit {
public data: Object[];
public groupOptions: GroupSettingsModel;
public filterSettings: FilterSettingsModel;
public columnMenuItems: ColumnMenuItemModel[];
@ViewChild('grid')
public grid: GridComponent;
ngOnInit(): void {
this.data = data.slice(0, 60);
this.groupOptions = { showGroupedColumn: true };
this.filterSettings = { type: 'checkbox' };
this.columnMenuItems = [{text:'Clear Sorting', id:'gridclearsorting'}];
}
public columnMenuClick(args: MenuEventArgs): void {
console.log('123');
if(args.item.id === 'gridclearsorting'){
this.grid.clearSorting();
}
}
}
Essential JS 2 Grid v 15.4.24 已经发布,其中包含“上下文菜单事件触发”的问题修复。请找到下面的工作 plunker 示例。
columnMenuClick(args){
if(args.item.id === 'gridclearsorting'){
this.grid.clearSorting();
}
}
在该示例中,我们添加了自定义列菜单选项以清除网格排序。