2013-08-14 2 views
0

Я загружаю запись на страницу aspx. У меня есть два комбокса. (В этом случае комбинированные ящики AJAX). Вторая загрузка основана на идентификаторе с первого.asp.net 2nd combobox не принимает selectedvalue

Когда я передаю ключ к странице в строке запроса, я извлекаю данные в класс, затем заполняю поля страницы из класса. Когда я устанавливаю carrier.selectedvalue = class.1value, выбор показывает правильно. Когда я устанавливаю product.selectedvalue = class.2value, выбор не берется. (Продукт ничего не выбрал)

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

Я попробовал два метода:

1) запрос по SQL набор данных (2-й набор данных) на основе выбранного значения из несущей Combox 2) Загрузить все продукты (2-й набор данных), а затем фильтровать продукты, основанные на значении от несущей combox

Оба метода загружают 2-ю комбокс со значениями, которые мне нужны. Ни один из методов не помогает мне получить выпадающее меню продукта, чтобы отобразить выбранное значение после отображения страницы.

Обратите внимание, что я делаю все это в Page_Load

-Спасибо заранее для поиска.

+1

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

+0

Gthompson83 Я предполагаю, что ты прав. Я устанавливаю второе значение в page_Load после того, как установлено первое поле со списком. Просто пытаюсь выяснить, куда переместить набор во второй combobox. – pStan

ответ

0

Gthompson83 поставил меня на правильный путь. Это была проблема привязки данных. Я переместил набор из combobx продукта (второй) поле со списком в DataBound событие так:

protected void cboProduct_DataBound(object sender, EventArgs e) 
    { 
     // Set the Product cbo 
     cboProduct.SelectedValue = c.Product_ID.ToString(); 
    } 

Это все, что потребовалось. Класс по-прежнему заполняется в событии Page_Load на основе значений из строки запроса. После запуска события DataBound я использую значения, которые я поместил в классе, чтобы установить значение выпадающего списка.

Некоторой полезной информации здесь: Databinding events for data-bound controls

На странице связаны выше есть хороший раздел на «Вложенные данных Bound Controls».

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

0

Проблема в том, что вы все делаете в Page_Load. Поступайте в следующем порядке в следующих случаях, чтобы предотвратить проблему:

  1. Page_Init: Заполняют Carrier товаров
  2. Page_Init: Set Carrier выбранного значения
  3. Page_Load: Четкие товары Product.Items.Clear()
  4. Page_Load: Заполняет продукт Предметы
  5. Page_Load: Набор продуктов Выбранные товары

Смотрите это руководство для того, как для эффективного использования событий Page: http://attemptsatprogramming.blogspot.com/2011/03/practical-guide-to-aspnet-event-model.html

+0

Я не уверен, что это сработает. На странице, которую вы указали, сказано следующее: «Одно предупреждение о том, что Page_Init заключается в том, что оно не может использоваться для инициализации элементов управления или заполнения списков, когда значение инициализации зависит от значения другого элемента управления». Это ... 2-я combox зависит от значения первого. Из того, что я читал о Page_Init, вы не можете гарантировать, что элементы управления страницей созданы еще ... – pStan

Смежные вопросы