Создание динамического пользовательского интерфейса ASP.NET, управляемого данными - Добавление новых динамических клиентских атрибутов
ОГЛАВЛЕНИЕ
Добавление новых динамических клиентских атрибутов
В дополнение к просмотру динамических атрибутов клиентов посетителям страницы также надо предоставить возможность добавлять новые атрибуты, а это можно выполнить несколькими способами. Одним из легких путей ввода информации в базу данных из веб-страницы является использование элемента управления DetailsView вместе с элементом управления источником данных, который настроен таким образом, что он поддерживает вставку данных. Элемент управления источником данными CustomAttributesDataSource включает в себя свойство InsertCommand, которое указывает выражение INSERT, используемое для добавления новых записей к таблице DynamicAttributesForClients:
INSERT INTO [DynamicAttributesForClients] ([CustomerId], [DataTypeId], [AttributeName], [SortOrder])
VALUES (@CustomerId, @DataTypeId, @AttributeName, @SortOrder)
Используя данное выражение мы можем настроить DetailsView таким образом, чтобы он поддерживал вставку данных, и более того, DetailsView может быть перманентно настроен на обработку в режиме вставки путем установки его свойства DefaultMode в Insert.
Значения DataTypeId, AttributeName и SortOrder нового атрибута должны быть указаны посетителем. Значение CustomerId, основано на пользователе, который в данный момент авторизирован, и оно может быть заполнено программно посредством метода GetCustomerIdForLoggedOnUser в классе Helpers. Чтобы установить значение CustomerId создайте обработчик для события ItemInserting элемента DetailsView. Данное событие запускается при старте процесса вставки и предоставляет возможность специализации значений, которые будут использованы при добавлении новой записи. Просто установите значение CustomerId в значение, возвращенное методом GetCustomerIdForLoggedOnUser:
Protected Sub dvAddAttribute_ItemInserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertEventArgs) Handles dvAddAttribute.ItemInserting
e.Values("CustomerId") = Helpers.GetCustomerIdForLoggedOnUser()
End Sub
По умолчанию интерфейс вставки DetailsView составлен из элемента управления TextBox. В то время как TextBox пригоден в некоторых случаях, он не настолько идеален в случаях ввода информации, когда требуется наличие какой-либо валидации, что лучше выполнить посредством альтернативного элемента управления ввода данных. К примеру, поле DataTypeId является внешним ключом к таблице DynamicAttributeDataTypes. Интерфейс вставки должен позволить посетителю выбирать тип данных нового атрибута из выпадающего списка вместо того, чтобы запрашивать у него значение ID. Аналогично интерфейс вставки для AttributeName и SortOrder должен включать в себя логику валидации, поскольку оба поля являются обязательными.
Следующий рисунок демонстрирует элемент управления DetailsView в действии. Элементы управления валидацией необходимы, чтобы обеспечить факт того, что пользователь вводит название и порядок сортировки для каждого нового атрибута, и порядок сортировки указывается значениями от 1 и 100.

Для того, чтобы получить больше информации по теме вставки данных при помощи элементов управления источника данных ASP.NET читайте статьи о вставке данных .
Не забудьте убрать атрибут Type для декларативных параметров с типом uniqueidentifier |
---|
Мастер Configure Data Source (настройка источника данных) элемента SqlDataSource позволяет с легкостью генерировать выражения INSERT, UPDATE и DELETE для запроса к базе данных. Тем не менее, есть одна проблема, которую вы должны учесть - параметры, созданные мастером для колонок с типом uniqueidentifier имеют своё свойство Type , установленное в Object. В таком случае при попытке вставки, редактирования и удаления информации будет вызвана исключительная ситуация, сопровождаемая сообщением: "Implicit conversion from data type sql_variant to uniqueidentifier is not allowed. Use the CONVERT function to run this query." (Неявное преобразование типа данных sql_variant в uniqueidentifier запрещено. Используйте функцию CONVERT для запуска данного запроса. ) Чтобы исправить данную ситуацию просто уберите атрибут Type из декларативной разметки параметра. Другими словами, вручную измените синтаксис параметра с: <asp:SqlDataSource ...> На: <asp:SqlDataSource ...> |