可以通过拦截浏览器的上下文菜单事件,显示网格上下文菜单。
首先,通过调用GridBase.setContextMenu,替代浏览器上下文菜单,设置将要显示的网格上下文菜单。 另外,可以通过GridBase.setDefaultContextMenu,将刚注册的菜单设置为基本菜单。 当调用setContextMenu时,如果没有指定菜单,就会运行基本菜单。
var menu = grdMain.setContextMenu([{
label: "Add Row",
callback: function () {
grdMain.insert();
}
},
...
]);
grdMain.setDefaultContextMenu(menu);
定义菜单的方法,请参考菜单概述帮助。
如果想根据鼠标点击的位置而显示不同的菜单组或不显示菜单,可以使用onContextMenuPopup事件。 如果在这个事件处理器中明确返回false,就不会显示菜单,而是会显示浏览器上下文菜单。
另外,也可以在处理器中,通过调用GridBase.setContextMenu而变更将要显示的菜单。 这时,可以指定通过GridBase.registerPopupMenu而注册的菜单。
grdMain.onContextMenuPopup = function (grid, x, y) {
var index = grid.pointToIndex(x, y);
if (index && index.column && index.column.name() == "LoanNumber") {
// 运行临时菜单。
grid.setContextMenu(menu2);
} else if (index && index.column && index.column.name() == "Country") {
// 如果返回false,就会替代网格菜单,运行浏览器菜单。
return false;
} else if (index && index.column && index.column.name() == "Currency") {
// 运行通过registerPopupMenu()注册的菜单。
return grid.setContextMenu('menu1');
} else {
// 运行默认上下文菜单。
grid.setContextMenu(null);
}
};
当点击菜单项时,如果在菜单项中已有设置callback,就会运行callback,否则就会触发GridBase.onContextMenuClicked事件。