2013-03-22 2 views
1

У меня есть приложение Dynamic Data, которое использует две таблицы. Для одной из таблиц есть столбец, который я хотел бы задать на основе столбца в другой таблице, используя раскрывающийся список, заполненный значениями из этой другой таблицы. В настоящее время этот столбец создается на странице в виде текстового поля. Тем не менее, Dynamic Data не предоставляет выпадающий элемент, чтобы предоставить для этого UIHint. Я попытался изменить поле управления Enumeration, чтобы сделать это, но не мог заставить его работать.Преобразование текстового поля в выпадающее меню в динамических данных

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

+0

Возможно, вам поможет, если вы добавите код, чтобы показать, как вы это делаете в данный момент. – JRoughan

+0

На самом деле мне удалось выяснить это самостоятельно в течение последних нескольких дней. Я разместил свое решение внизу. – MattD

ответ

0

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

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

Начните с создания нового элемента управления в папке FieldTemplates. Назовите его чем-то вроде DropDown. У вас будет ваш ascx, код за файлом и файл дизайнера.

Затем, возьмите код из файла ASCX для Enumeration_Edit, и скопировать его в файл ASCX для нового управления в раскрывающемся меню. Возможно, вам потребуется переименовать идентификатор элемента управления DropDownList.

С кодом позади, скопируйте код из кода элемента управления Enumeration_Edit позади и изменить их, чтобы удовлетворить потребности в раскрывающемся списке.

Ваш класс PageLoad должен выглядеть следующим образом:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     OnDataBinding(); 
    } 

    SetUpValidator(RequiredFieldValidator1); 
    SetUpValidator(DynamicValidator1); 
} 

Ваш OnDataBinding должен быть настроен так:

public void OnDataBinding() 
{ 
    //Code for binding data from a query/stored proc to a dropdown should go here. 
} 

Держите ExtractValues ​​() и DataControl() классы, но вы можете избавиться от класса EnumType().

Также не забудьте добавить ссылки, которые могут вам понадобиться. Сравните код для элемента управления Enumeration_Edit и нового элемента управления, чтобы понять это.

Теперь, чтобы сделать работу управления на текстовое поле для столбца вы хотите, чтобы контролировать ввод данных для. Вы можете просто добавить [UIHint("DropDown")] в соответствующий элемент столбца для вашего неполного класса для таблицы, но это применит элемент управления ко всем экземплярам этого столбца при отображении. У меня есть настройка настраиваемых страниц для каждой из моих таблиц, и я хочу, чтобы этот элемент управления использовался для функциональных возможностей вставки определенного столбца.Таким образом, я изменил мою страницу Вставка для этой таблицы, чтобы сделать линию контролируя эту колонку, чтобы выглядеть следующим образом:

<asp:DynamicField DataField="COLUMN_NAME" UIHint="DropDown" ReadOnly="true" /> 

Действовать таким образом вы применятся только контроль в этой колонке на этой странице. Вам нужно установить значение ReadOnly равным true, иначе оно будет отображаться как текстовое поле ввода, а не раскрывающееся меню.

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

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

1

Вы использовали фильтр?

FilterControl свойства возвращает элемент управления, который должен получить фокус, когда пользователь выбирает метку, сгенерированную для него с помощью QueryableFilterRepeater. В нашем фильтре даты это может быть либо раскрывающийся список, либо текстовое поле.

возможно проверить этот пост поможет вам: http://www.olegsych.com/2010/07/understanding-aspnet-dynamic-data-filter-templates/

+0

Не совсем видно, как это помогает мне. Приведенный пример предназначен для запроса существующей таблицы, чтобы сузить список. Мне нужно, чтобы можно было заполнить выпадающее меню значениями из другой таблицы, так что, когда новая запись создается со страницы вставки, она устанавливает значение для этого столбца равным значению из другой таблицы. – MattD