#vb.net #winforms #dataset
#vb.net #winforms #набор данных
Вопрос:
Есть ли быстрый и простой способ создать VB.NET пользовательский интерфейс для управления данными в нормализованном наборе данных?
Я знаю, что это очень субъективный вопрос, поэтому позвольте мне объяснить. В течение короткого периода в начале моей карьеры я создавал пользовательские интерфейсы в Microsoft Access. Я разработал простой, но очень эффективный подход к дизайну пользовательского интерфейса. Вот некоторые подробности этого подхода:
- Создайте по одной форме для каждой таблицы. Поместите в каждую форму все элементы управления, необходимые для полного управления одной строкой в таблице.
- Используйте поля со списком для столбцов с внешним ключом.
- Предоставьте пользователю стандартный способ добавления строк и удаления строк.
- Используйте кнопки Применить и отменить.
- Позвольте пользователю перемещаться от одной строки к другой с помощью окна списка.
- Предоставьте окно поиска и параметры фильтрации для более эффективной навигации.
- Позвольте пользователю дважды щелкнуть по элементам управления, представляющим столбцы внешнего ключа, для быстрого перехода от одной формы к другой.
- Сделайте состояние каждой формы постоянным (чтобы пользователь всегда возвращался к последней точке навигации)
- и т.д.
Просто, не так ли? Я обнаружил, что Access поощряет этот подход. Он имеет множество встроенных функций, которые упрощают этот тип пользовательского интерфейса. Например, создание поля со списком для представления взаимосвязи внешнего ключа занимает около 10 секунд.
Ну, я некоторое время не работал в Access. Однако пару лет назад меня наняли написать приложение в VB.NET в NET 2.0 framework. Чтобы быстро запустить пользовательский интерфейс управления данными, я использовал свой опыт Access для написания быстрого и простого прототипа в Access — это заняло у меня около недели. Затем я нанял программиста для реализации того же пользовательского интерфейса в VB.NET . Какой кошмар! Мы работали над этой реализацией в течение года, и я все еще очень недоволен результатами. Некоторые из проблем, с которыми мы сталкиваемся:
- Кнопки Применить и Отменить работают не совсем правильно. Мы не можем найти событие, которое сообщает нам, когда форма «грязная» (таким образом, применение и отмена актуальны).
- Навигация от строки к строке и от формы к форме требует удивительно сложного кода. У меня создается впечатление, что мы боремся с функциями привязки NET, не работая с ними так, как они были предназначены для использования.
- СЕТЕВЫЕ элементы управления кажутся глючными. Например, когда пользователь вводит значение в поле со списком (в отличие от выбора его из выпадающего списка), это не запускает событие SelectedValueChanged.
- Кажется, мы повторяем много информации. Например, набор данных знает, что существует взаимосвязь между столбцами в двух таблицах, но мы, тем не менее, должны эффективно повторять детали этой взаимосвязи при программировании полей со списком, привязки, функций навигации и т.д.
- У нас все еще нет хороших решений для функций фильтрации и поиска. Необходимо проработать множество мелких деталей. (Например, что, если вы выберете фильтр, который не включает отображаемую в данный момент строку?)
- Мы пишем множество вспомогательных функций и классов для упрощения работы, и я не могу понять, почему этого еще не сделали другие — я уверен, что мы изобретаем велосипед.
- и т.д.
Сами по себе ни одно из вышеперечисленных не имеет большого значения — для каждого из них есть эффективные решения. Однако, взятые вместе, эти проблемы заставляют мою разработку пользовательского интерфейса идти намного медленнее, чем ожидалось.
В идеальном мире я должен быть в состоянии создать небольшой объем кода, относящийся к моей конкретной модели данных (например, один пользовательский элемент управления на таблицу, устанавливающий макет и логику, относящиеся к строкам в этой таблице), затем интегрировать этот код в шаблон, который интерпретирует модель данных и обрабатывает все остальное — навигацию, добавление и удаление, применение и отмену, поиск и фильтрацию и т.д.
Таким образом, мой вопрос: есть ли что-нибудь, что упрощает разработку этого типа пользовательского интерфейса?
Я искал в Интернете различные комбинации «универсальных форм», «Шаблонов пользовательского интерфейса», «форм управления данными» и т.д., Но я не нашел ничего по теме. Возможно, я просто не знаю модных слов. Существует ли конкретное название для этого типа задачи разработки пользовательского интерфейса?
Ответ №1:
Создайте UCS для каждой таблицы. Поместите элемент управления grid в UC и привяжите его к набору данных tables с помощью мастера VS. Выберите параметры, которые позволяют вставлять, обновлять, удалять. В каждую строку в таблице будут автоматически добавлены эти кнопки / действия для вас.
Комментарии:
1. Используйте транзакции с помощью кнопки в верхней части пользовательского интерфейса для запуска или отката фиксации.