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);
        }