Типичная парадигма пользовательского интерфейса для такого рода вещей состоит в том, чтобы рассматривать ее как две отдельные проблемы: дать пользователю возможность просматривать элементы, которые он может изменить, и дать ему возможность изменять любой конкретный элемент. Вы используете элемент управления списком (ListBox
, ListView
, возможно TreeView
, если элементы организованы иерархически или должны быть сгруппированы по категориям) для представления элементов, а затем, когда пользователь выбирает элемент, программа представляет таблицу представление имен полей и редактируемых элементов управления значениями.
По сути, вы делите функциональность программы на две категории: вещи, которые пользователь хочет сделать со строками (добавление, удаление, изменение порядка, выбор) и вещи, которые пользователь хочет сделать с элементами выбранной строки.
Вы можете объединить эти два набора функций в один, если используете DataGridView
, но, как вы видели, это становится довольно уродливо, если есть какие-то сложности с элементами, которые вы редактируете.
Два возможных подхода к этому: парадигма листа свойств (выберите объект, щелкните правой кнопкой мыши, выберите «Свойства», отредактируйте значения в модальном диалоговом окне) или парадигма, в которой окно разделено на две панели, одна из которых является строки, а другая - это детали текущей выбранной строки. Есть много других.