У меня мало опыта в разработке GUI для windows desktop приложений, но сейчас на проекте встала такая задача.
Задача:
Есть какая-то сущность (допустим, Клиент, Поставщик и т.д.) и нужно создать интерфейс для создания/редактирования и удаления этих сущностей.
Мне видится 3 основных варианта решения:
1) В простых случаях задачу можно решить обычным гридом:
Т.е. воркфлоу такой: при нажатии Add добавляется пустая строка в грид. При нажатии Delete у пользователя спрашивается точно ли он хочет удалить выделенный в гриде экземпляр сущности. При нажатии Save сохраняются все что там пользователь наредактировал/наудалял. При нажатии Close форма закрывается предварительно спросив нужно ли сохранить изменения.
Минус — имхо такое подходит только для простейших сущностей. Редактировать в гриде что-то сложное имхо неудобно ни пользователю ни программисту (в плане реализации).
2) Если у нас что-то более сложное, то возможен такой вариант:
Жмем Add — появляется модальная форма для ввода информации о новом экземпляре сущности. При нажатии OK — валидация и если все ок, то добавление в грид. При двойном клике по строке в гриде (ну можно еще кнопку Edit добавить в принципе) появляется та же модальная форма, но уже в режиме редактирования.
Минус — на каждую сущность приходится делать минимум 2 формы.
3) Еще такой вот вариант вижу:
Грид тут работает только в режиме отображения. При фокусе на какой-либо строке грида, заполняются поля над гридом и в них можно изменить данные. При нажатии Add создается новый объект, добавляется в datasource грида, фокусируется в гриде, срабатывает байндинг, вверху поля очищаются, курсор перемещается на первое поле.
Минусов вроде не вижу, вроде неплохой вариант, хотя я такое почему-то мало где видел.
Теперь вопросы к людям с опытом в проектировании пользовательского интерфейса и юзабилити:
— Какой вариант обычно используете вы? Может другой (не представленный выше)?
— Если можно, то вкратце о релизации (dataset/custom business objects/binding и т.д.). У меня в проекте .NET Windows Forms.
— Какие недостатки вы заметили в приведенных выше вариантах?
— Посоветуете что-то почитать по теме?
Спасибо за помощь.