private ContextMenu MakeCopyLookupMenus(DataGridView dataGridView, int rowIndex, int columnIndex) { var menu = new ContextMenu( ); if (!String.IsNullOrEmpty(DgvHelpers.GetCellString(dataGridView, rowIndex, columnIndex).Trim( ))) { menu.MenuItems.Add(new MenuItem(string.Format(@"Copy {0}", DgvHelpers.GetColumnName(dataGridView, columnIndex)), delegate { Clipboard.SetText(dataGridView.Rows[rowIndex].Cells[columnIndex].Value.ToString( )); })); } if (!GenerateLookupMenu) { return(menu); } var lookupMenu = new MenuItem(@"Lookup"); var clickedColumnName = dataGridView.Columns[columnIndex].Name; foreach (DataGridViewColumn column in dataGridView.Columns) { if (MagicValues.FieldsToNotLoopup.Contains(column.Name)) { continue; } if (!DgvHelpers.CanSearch(column)) { continue; } if (!column.Visible) { continue; } var curCellValue = DgvHelpers.GetCellString(dataGridView, rowIndex, column.Index); var menuName = column.HeaderText; Helpers.AssertNotNull(menuName, @"All columns must have a header defined"); if (0 == string.Compare(clickedColumnName, column.Name, StringComparison.InvariantCulture)) { menuName = "*" + menuName; } lookupMenu.MenuItems.Add(new MenuItem(menuName, delegate { SearchWeb(curCellValue); })); } if (0 < lookupMenu.MenuItems.Count) { menu.MenuItems.Add(lookupMenu); } return(menu); }