ASP.NET 2.0 правильный контроль для добавления в БД - PullRequest
0 голосов
/ 09 ноября 2010

Я ищу несколько советов. Я работаю около 11 лет на платформе Oracle EnterpriseOne и сейчас перехожу к c #. Так что я не новичок в программировании, но при создании веб-страниц на c # ASP.NET я пытаюсь связать несколько концепций.

У меня есть следующий сценарий:

Итак, у меня есть заголовок заказа + таблица сведений о заказе, и я хочу создать новый заказ, потенциально может быть несколько строк заказа для каждого заголовка заказа.

В EnterpriseOne у меня был бы целевой экран, на котором можно было бы искать, выбирать и добавлять новые заказы. Когда вы нажимаете кнопку добавления, я загружаю экран заголовка (без сетки), где вы вводите всю информацию заголовка заказа, общую для всех записей деталей заказа. При нажатии кнопки «ОК» (к экрану заголовка) я отображал подробный экран (сетку), в который можно было бы добавить несколько подробных записей заказа.

Так как мне это сделать в c # ASP.NET 2.0? Я хотел бы создать N-уровневое приложение.

  1. Я создал новые классы (OrdersHeader + Order Detail), которые соответствуют моему заголовку заказа и таблицам деталей заказа.
  2. Я создал новый класс (OrdersDB), который взаимодействует с классами заголовка / детализации заказа и базой данных (используя ADO.NET и хранимые процедуры).
  3. На целевом экране я создал ObjectDataSource, указывающий на OrdersDB и SelectMothod ..., так что это вернет коллекцию OrderDetails и позволит пользователю осуществлять поиск и выбирать существующие детали order.
  4. Я создаю экран заголовка (когда они нажимают добавить), который будет содержать список текстовых полей + метки. При нажатии OK я создам экземпляр нового класса OrderHeader из значений на экране и перейду к методу вставки OrdersDB. это правильно?
  5. На экране сведений, какой элемент управления следует использовать, чтобы позволить пользователю добавить данные заказа? Я предполагал, что мог бы использовать GridView, который был настроен для разрешения вставки, но при запросе на пустой БД это возвращает пустую сетку (и теперь позволяет мне добавлять новые строки).

Надеюсь, это достаточно ясно. Я уверен, что очевидно, что мне нужно делать, но я думаю, что годы работы на другой платформе запутали проблему для меня.

Ответы [ 2 ]

1 голос
/ 09 ноября 2010

Я думаю, вы поняли правильную идею.Проблема в том, как вы делаете вставки с сеткой, и, к сожалению, она не поставляется с шаблоном вставки.Самый простой способ сделать это - просто поместить элементы управления вставкой на панель и показать элементы управления, когда они нажимают кнопку «Добавить элемент».

Вы можете использовать вид сетки для вставки, добавив элементы управления вставкой в ​​шаблоны элементов нижнего колонтитула, но вам придется самостоятельно обрабатывать скрытие и отображение строки нижнего колонтитула.Кроме того, строка нижнего колонтитула не будет отображаться, если вы привязываетесь к пустому набору данных, поэтому вам нужно заполнить gridview фиктивной записью или чем-то, чтобы нижний колонтитул отображался, когда нет элементов, поэтому есть несколько обручей для прыжка, хотя, но если вы Google, вы должны найти несколько примеров.Вот тот, который выглядит действительным: http://www.aspdotnetfaq.com/Faq/How-to-insert-row-in-GridView-with-SqlDataSource.aspx

Есть и другие элементы управления, которые вы можете использовать, такие как подробный просмотр и просмотр формы, но, честно говоря, я никогда не буду их использовать, потому что к тому времени, когда вы добавите сложность, такую ​​как транзакции и пользовательские проверки и всечто это может быть больно, и я думаю, что проще всего обработать весь код вручную для редактирования и вставки, если это не очень простая ситуация.Они хороши своей способностью автоматически генерировать поля и метки из схемы базы данных, поэтому они могут быть полезны.

Так что, по крайней мере, я использую сетку для просмотра, а иногда и для редактирования, но редко для вставки, и я редко использую встроенное обновление с двухсторонним связыванием данных.Обычно, если я редактирую в виде сетки, я просто использую кнопку редактирования, чтобы захватить индекс элемента редактирования, и беру ключ с аргументом команды или griddatakeys и сам обрабатываю код обновления.Не сказать, что это лучший способ, просто так я чаще всего это делаю.

1 голос
/ 09 ноября 2010

Это действительно зависит от интерфейса пользователя, к которому вы обращаетесь.

Если вам нужен один экран, где вы можете в основном напрямую редактировать строки в базе данных (редактировать значения, удалять записи, добавлять записи), которые вы, вероятно, ищетеa GridView

Это также зависит от вашего уровня комфорта / опыта работы с веб-формами ASP.NET.Веб-формы великолепны в смысле «перетаскивания» (что также является недостатком IMO).Это означает, что вы можете бросить элемент управления на страницу и быть готовым к работе.

Но иногда это излишне.Я предпочитаю использовать веб-элементы управления только тогда, когда это абсолютно необходимо.

Я хотел бы использовать простую форму, базовые поля формы, затем создавать сущность на сервере и переходить на бизнес-уровень для проверки и сохранения.Иметь полный контроль над процессом.

Кстати, я не вижу в вашем вопросе, как какое-либо из ваших решений до сих пор является N-Tier?Если вы хотите N-уровень, вы должны обмениваться данными с вашим уровнем данных (который будет находиться на отдельном компьютере с вашим веб-уровнем) через какой-либо веб-сервис (например, WCF), без прямого вызова OrdersDB

...