これはご使用の環境でテストする必要がありますが、機能する可能性があると思います。
秘訣は、MouseDownイベントを使用して、マウス位置の下のセル(存在する場合)をチェックし、IsDataRowプロパティをテストするDataRowセル上にある場合にのみContextMenuを割り当てることです。
private void grid_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
UltraGridCell currentCell = null;
grid.ContextMenu = null;
if (e.Button == MouseButtons.Right)
{
Point ulPoint = new Point(e.X, e.Y);
UIElement el = grid.DisplayLayout.UIElement.ElementFromPoint(ulPoint);
if (el != null)
currentcell = (UltraGridCell)el.GetContext(typeof(UltraGridCell));
if (currentcell != null && currentCell.Row.IsDataRow == true)
{
grid.ActiveCell = currentcell;
grid.ContextMenu = menuPopup;
}
}
}