protected override string DoImpl()
        {
            var registeredKey = this.ExecutedCommand.Parameters["ID"].ToString();

            var element = this.Automator.ElementsRegistry.GetRegisteredElement(registeredKey);

            DataGridViewHeader item = (DataGridViewHeader)element.FlaUIElement;

            var columns = item.Columns;

            var flaUiDriverElementList = columns
                                         .Select <AutomationElement, FlaUIDriverElement>((Func <AutomationElement, FlaUIDriverElement>)(x => new FlaUIDriverElement(x)))
                                         .ToList <FlaUIDriverElement>();

            var registeredKeys = this.Automator.ElementsRegistry.RegisterElements(flaUiDriverElementList);

            var registeredObjects = registeredKeys.Select(e => new JsonElementContent(e));

            return(this.JsonResponse(ResponseStatus.Success, registeredObjects));
        }
        /// <summary>
        /// <see cref="DataGridViewHeader.Columns"/> does not work in culture different than English or German
        /// </summary>
        /// <returns></returns>
        private static DataGridViewHeaderItem[] GetDataGridViewHeaderColumns(DataGridViewHeader dataGridViewHeader)
        {
            // WinForms uses Header control type, WPF uses HeaderItem control type
            var headerItems = dataGridViewHeader.FindAllChildren(cf =>
                                                                 cf.ByControlType(ControlType.Header)
                                                                 .Or(cf.ByControlType(ControlType.HeaderItem)));
            var convertedHeaderItems = headerItems.Select(x => new DataGridViewHeaderItem(x.FrameworkAutomationElement))
                                       .ToList();

            // Remove the top-left header item if it exists (can be the first or last item)
            if (convertedHeaderItems.Last().Text == CustomLocalizedStrings.DataGridViewHeaderItemTopLeft)
            {
                convertedHeaderItems = convertedHeaderItems.Take(convertedHeaderItems.Count - 1).ToList();
            }
            else if (convertedHeaderItems.First().Text == CustomLocalizedStrings.DataGridViewHeaderItemTopLeft)
            {
                convertedHeaderItems = convertedHeaderItems.Skip(1).ToList();
            }
            return(convertedHeaderItems.ToArray());
        }
        protected override string DoImpl()
        {
            var registeredKey = this.ExecutedCommand.Parameters["ID"].ToString();

            var element = this.Automator.ElementsRegistry.GetRegisteredElement(registeredKey);

            DataGridView item = element.FlaUIElement.AsDataGridView();

            DataGridViewHeader header = item.Header;

            if (header == null)
            {
                throw new AutomationException("Element cannot be found", ResponseStatus.NoSuchElement);
            }

            var itemRegisteredKey = this.Automator.ElementsRegistry.RegisterElement(new FlaUIDriverElement(header));

            var registeredObject = new JsonElementContent(itemRegisteredKey);

            return(this.JsonResponse(ResponseStatus.Success, registeredObject));
        }