C # Выбор первой строки в категории по алфавиту отсортированы ProperyGrid - PullRequest
1 голос
/ 02 июля 2011

У меня есть ProperyGrid, загруженный категоризованной PropertySpec и установленный на Категоризованную сортировку по алфавиту. Когда форма запускает категории, то элементы в категориях сортируются. Раздражающим артефактом является то, что PropertyGrid по умолчанию выбирает первый элемент после сортировки списка, а иногда прокручивает представление для выбора. Если список элементов длинный, вы в конечном итоге увидите, что список прокручен до середины.

Поскольку PropertySpec может быть создан во время выполнения, я хочу всегда показывать верхнюю часть списка при загрузке формы. PropertyGrid не «легко» представляет коллекции и, конечно, не в упорядоченной последовательности. После поисков вокруг меня меня убеждают, что это невозможно?

1 Ответ

4 голосов
/ 03 июля 2011

Я пришел с кодом ниже, который доказывает обратное.

Фрагмент выберет первую категорию отсортированного списка.Можно также выбрать первый элемент в этой категории, расширяя метод, но для моих нужд это было не нужно.

// bind the PropertyTable to PropertyGrid
this.pg_Prefs.SelectedObject = proptable;

// get selected item
GridItem gi = this.pg_Prefs.SelectedGridItem;
// get category for selected item
GridItem pgi = gi.Parent.Parent;

//sort categories
List<GridItem> sortedCats = new List<GridItem>(pgi.GridItems.Cast<GridItem>());
sortedCats.Sort(delegate(GridItem gi1, GridItem gi2) { return gi1.Label.CompareTo(gi2.Label); });

// loop to first category
for (int i = 0; i < pgi.GridItems.Count; i++)
{
    if (pgi.GridItems[i] == gi) break; // in case full circle done
    // select if first category
    if (pgi.GridItems[i].Label == sortedCats[0].Label)
    {
         pgi.GridItems[i].Select();
         break;
    }
}

Надеюсь, это поможет и другим.

Упрощенный метод фактического выборакатегория после сортировки списка будет sortedCats[0].Select(); вместо циклического просмотра и проверки каждого элемента.Вы должны были бы утверждать, что список не пустой, если вы хотите использовать этот ярлык, но это даст некоторое улучшение производительности ...

...