• Microsoft .NET
  • ASP.NET
  • Создание динамического пользовательского интерфейса ASP.NET, управляемого данными

Создание динамического пользовательского интерфейса ASP.NET, управляемого данными - Специализированные атрибуты, позволяющие выбрать опцию из списка

ОГЛАВЛЕНИЕ

Специализированные атрибуты, позволяющие выбрать опцию из списка

Каждый специализированный атрибут, созданный пользователем должен иметь тип данных. Тип данных определяет способ обработки интерфейса атрибута. В первой статье данной серии мы определили четыре типа данных в таблице DynamicAttributeDataTypes:

  • String
  • Boolean
  • Numeric
  • Date
Типы данных String, Numeric и Date обрабатывают элемент управления TextBox для сохранения вводимой информации. (Типы Date и Numeric также включают в себя CompareValidator , для того, чтобы гарантировать ввод правильных значений дат и числовых значений). Тип данных Boolean обрабатывает CheckBox. Еще один интерфейс для сбора информации - это выпадающий список, который позволяет пользователю выбрать один элемент из указанного списка. Такой тип интерфейса может быть реализован, но он требует немного больше работы над ним, чем в случае с другими типами данных - как в определении типа данных, так и в обработке динамического пользовательского интерфейса. Приложение к данной статье было расширено и включает в себя новый тип данных с названием "Pick List."

Для того, чтобы использовать тип данных "pick list" нам необходимо разрешить пользователям указать набор опций выбора для определенного специализированного атрибута. Для того, чтобы сохранить данный набор вариантов нам необходимо добавить новую таблицу к базе данных. Я создал таблицу DynamicPickListOptions со следующей структурой:

Column Name Data Type Описание
DynamicPickListOptionID uniqueidentifier Первичный ключ; значение по умолчанию - NEWID()
AttributeId uniqueidentifier Внешний ключ к DynamicAttributesForClients.DynamicAttributeId
DisplayText nvarchar(50) Текст, который необходимо отобразить в элементе выпадающего списка
OptionValue nvarchar(50) Значение, ассоциируемое с элементом выпадающего списка
SortOrder int  

Колонка AttributeId связывает список вариантов со специализированными атрибутами. К примеру, представьте себе специализированный клиентский атрибут под названием "Payment Options" (Способ оплаты). Если существует три варианта - Pro Bono, On Retainer и Paid/Hour, то в таблице DynamicPickListOptions будет три записи, все указывающие обратно на тот же атрибут - "Payment Options."

OptionValue предназначен для ассоциации дополнительной информации с определенным элементом выпадающего списка. Данная колонка пригода для ответов или других действий. Она не используется напрямую с целью указания выбранного значения. Вместо нее используется значения колонки DynamicPickListOptionID. К примеру, если определенный клиент осуществляет почасовую оплату, и опция Paid/Hour в DynamicPickListOptions имеет значение DynamicPickListOptionID равное of 0477a3a3-4793-4247-8b37-ad756b8cd367, то тогда в таблице DynamicValuesForClientsDynamicValue будет равно 0477a3a3-4793-4247-8b37-ad756b8cd367. Значение колонки OptionValue для Paid/Hour не играет никакой роли. будет запись, чье значение колонки

Пользовательский интерфейс для определения специализированных клиентских атрибутов должен быть обновлен. В частности, нам необходима страница, где пользователь может определить варианты для определенного атрибута типа списка. Для этого я добавил новую страницу к веб-приложению в каталоге Customers под названием EditPickListOptions.aspx. Используя строку запроса данной странице передается DynamicAttributeId того атрибута, чьи варианты необходимо обработать, и затем отображаются DetailsView и GridView, позволяющие вставку, обновление и удаление вариантов списка выбора. Данная страница в действии отображена в следующем изображении.


Я также обновил страницу DefineClientAttributes.aspx и она теперь включает в себя ссылку в GridView с названием "Edit Pick List Options" (Редактировать варианты списка выбора), которая ссылается на EditPickListOptions.aspx?ID=DynamicAttributeID. Эта ссылка отображается только для атрибутов типа "Pick List."

Вдобавок я обновил методы CreateCustomAttributeUI и GetValueForCustomAttribute в ClientCustomAttributes.aspx - эти методы используются для динамического создания пользовательского интерфейса и соотвественно возврата значений, введенных пользователем. CreateCustomAttributeUI теперь добавляет элемент управления DropDownList для атрибутов типа Pick List. Он заполняет DropDownList набором опций, указанных для специализированного атрибута. Он также включает вариант "-- Select One --". Если специализированный атрибут отмечен как обязательный, то добавляется RequiredFieldValidator , при этом его свойство InitialValue установлено в опцию "-- Select One --".

Метод GetValueForCustomAttribute получает DropDownList (посредством метода FindControl). Если выбрана опция "-- Select One --", то тогда используется значение NULL базы данных для DynamicValue в таблице DynamicValuesForClients. В противном случае используется соответствующее значение DynamicPickListOptionID опции.