Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выбор значения из DropDownList 
:(
    Опции темы
Yagmort
Дата 14.2.2011, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 17.6.2009

Репутация: нет
Всего: -1



Есть 2 DropDownList а, в 1 я выбираю значение, а во 2-ом у меня по этому значению выбираются(отсекаются) определенные значения. Во 2-ом DropDownList2 видно 2 поля, но почему то при выборе любого из 2-х значений, они у меня не выбираются и сбрасываются на начало ... Где я тут ошибся ?  
Код

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
this.DropDownList2_Init(this, e); 
}
protected void DropDownList2_Init(object sender, EventArgs e)
        {
            if (DropDownList1.SelectedIndex == 1)
            {
                INSERTED_CLASS ic = new INSERTED_CLASS();// создание объекта класса для заполнения и обновления DropDownList
                ic.refresh(DropDownList2);//Функция класса обновления DropDownList
                ic.select("SELECT * FROM [base].[dbo].[TABLE] WHERE ([id_field] =3) OR([id_field] =4) ", "DefaultView", "id_field", "id_field", DropDownList2, "ПОЛЕ");//  заполнение DropDownList
            }
}


Это сообщение отредактировал(а) Yagmort - 14.2.2011, 11:04
PM MAIL   Вверх
Gluttton
Дата 14.2.2011, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 2
Всего: 54



Не уверен, но может быть поможет.

Цитата(Yagmort @  14.2.2011,  11:03 Найти цитируемый пост)
но почему то при выборе любого из 2-х значений, они у меня не выбираются и сбрасываются на начало

Обработчики нужно "завернуть" в условие:
Не обработчики, а код в Page_Load !
Код

if (! IsPostBack) {

}

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

Это сообщение отредактировал(а) Gluttton - 14.2.2011, 11:16


--------------------
Слава Україні!
PM MAIL   Вверх
Gluttton
Дата 14.2.2011, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 2
Всего: 54



Цитата(Yagmort @  14.2.2011,  11:03 Найти цитируемый пост)
ic.select("SELECT * FROM [base].[dbo].[TABLE] WHERE ([id_field] =3) OR([id_field] =4) ", "DefaultView", "id_field", "id_field", DropDownList2, "ПОЛЕ");//  заполнение DropDownList

Рекомендую посмотреть в сторону DataBind ;) .


--------------------
Слава Україні!
PM MAIL   Вверх
Yagmort
Дата 14.2.2011, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 17.6.2009

Репутация: нет
Всего: -1



Цитата(Gluttton @ 14.2.2011,  11:29)
Цитата(Yagmort @  14.2.2011,  11:03 Найти цитируемый пост)
ic.select("SELECT * FROM [base].[dbo].[TABLE] WHERE ([id_field] =3) OR([id_field] =4) ", "DefaultView", "id_field", "id_field", DropDownList2, "ПОЛЕ");//  заполнение DropDownList

Рекомендую посмотреть в сторону DataBind ;) .

И что там у меня с ним ? Он же связывает источник данных с эл. управления ?

Добавлено через 3 минуты и 10 секунд
Я не вижу вариантов, как его передаелать, так чтобы он не обновлял список...

Добавлено через 7 минут и 45 секунд
Он его при выборе из списка значения переприцепляет, как убрать не знаю, ведь событие  
Код

DropDownList2_Init
 все равно срабатывает...
PM MAIL   Вверх
Gluttton
Дата 14.2.2011, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 2
Всего: 54



Yagmort, 
Цитата(Gluttton @  14.2.2011,  11:29 Найти цитируемый пост)
Рекомендую посмотреть в сторону DataBind ;) . 

Это не имеет отношения к описанной проблемы. Это я на будущее.

Касательно проблемы: покажи Page_Load.


--------------------
Слава Україні!
PM MAIL   Вверх
Yagmort
Дата 14.2.2011, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 17.6.2009

Репутация: нет
Всего: -1



Page Load у меня пустой;
Ровно как и Update Panel, на которой находятся эти контролы.

Добавлено через 5 минут и 13 секунд
Сделал точку останова, и понял, что при выборе значения из DropDownList2 он мне с обновлением страницы, вызывает еще и событие. Но как сделать, так чтобы он его не вызывал при выборе значения из DDL2?
 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
this.DropDownList2_Init(this, e); 
}
PM MAIL   Вверх
Gluttton
Дата 14.2.2011, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 2
Всего: 54



AutoPostBack ?

Цитата

Но как сделать, так чтобы он его не вызывал при выборе значения из DDL2?


Код

if (! IsPostBack)


Только вот куда его воткнуть не скажу. Но чувствую, что должно помочь smile .

Это сообщение отредактировал(а) Gluttton - 14.2.2011, 12:31


--------------------
Слава Україні!
PM MAIL   Вверх
Yagmort
Дата 14.2.2011, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 17.6.2009

Репутация: нет
Всего: -1



Цитата(Gluttton @ 14.2.2011,  12:23)
AutoPostBack ?

Цитата

Но как сделать, так чтобы он его не вызывал при выборе значения из DDL2?


Код

if (! IsPostBack)


Только вот куда его воткнуть не скажу. Но чувствую, что должно помочь smile .

Знаю, что такое IsPostBack воткнул я его на загрузку форму и написал туда это, но при выборе ничего не пояляется
this.DropDownList2_Init(this, e); 

PM MAIL   Вверх
Gluttton
Дата 14.2.2011, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 2
Всего: 54



Yagmort, ОК. А зачем вообще инициализировать DropDownList? Почему нельзя его объявить пустым, а затем после выбора элемента в одном DropDownList выбирать значения в коллекцию и заполнять ими второй DropDownList?

Какова вообще логика работы связки двух DropDownList?


--------------------
Слава Україні!
PM MAIL   Вверх
Yagmort
Дата 14.2.2011, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 17.6.2009

Репутация: нет
Всего: -1



Цитата(Gluttton @ 14.2.2011,  12:43)
Yagmort, ОК. А зачем вообще инициализировать DropDownList? Почему нельзя его объявить пустым, а затем после выбора элемента в одном DropDownList выбирать значения в коллекцию и заполнять ими второй DropDownList?

Какова вообще логика работы связки двух DropDownList?

Ну сделал я так, но все равно одно и то же 
Кстати AvtoPostBack=true;
Код

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
            if (DropDownList1.SelectedIndex == 1)
            {
                INSERTED_CLASS ic = new INSERTED_CLASS();// создание объекта класса для заполнения и обновления DropDownList
                ic.refresh(DropDownList2);//Функция класса обновления DropDownList
                ic.select("SELECT * FROM [base].[dbo].[TABLE] WHERE ([id_field] =3) OR([id_field] =4) ", "DefaultView", "id_field", "id_field", DropDownList2, "ПОЛЕ");//  заполнение DropDownList
            }
}


Добавлено через 2 минуты и 57 секунд
Цитата(Yagmort @ 14.2.2011,  12:46)
Цитата(Gluttton @ 14.2.2011,  12:43)
Yagmort, ОК. А зачем вообще инициализировать DropDownList? Почему нельзя его объявить пустым, а затем после выбора элемента в одном DropDownList выбирать значения в коллекцию и заполнять ими второй DropDownList?

Какова вообще логика работы связки двух DropDownList?

Ну сделал я так, но все равно одно и то же 
Кстати AvtoPostBack=true;
Код

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
            if (DropDownList1.SelectedIndex == 1)
            {
                INSERTED_CLASS ic = new INSERTED_CLASS();// создание объекта класса для заполнения и обновления DropDownList
                ic.refresh(DropDownList2);//Функция класса обновления DropDownList
                ic.select("SELECT * FROM [base].[dbo].[TABLE] WHERE ([id_field] =3) OR([id_field] =4) ", "DefaultView", "id_field", "id_field", DropDownList2, "ПОЛЕ");//  заполнение DropDownList
            }
}

Да но если я уберу AvtoPostBack, то отсылка на сервер не выполняется и мое событие DDL1 не работает.

Добавлено через 7 минут и 28 секунд
Цитата(Gluttton @ 14.2.2011,  12:43)
Yagmort, ОК. А зачем вообще инициализировать DropDownList? Почему нельзя его объявить пустым, а затем после выбора элемента в одном DropDownList выбирать значения в коллекцию и заполнять ими второй DropDownList?

Какова вообще логика работы связки двух DropDownList?

Убрал AvtoPostBack и его выполняю, только при определенном событии и все заработало... Но только правильно ли это ?
PM MAIL   Вверх
Gluttton
Дата 14.2.2011, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 2
Всего: 54



Цитата(Yagmort @  14.2.2011,  12:46 Найти цитируемый пост)
Убрал AvtoPostBack и его выполняю, только при определенном событии и все заработало... Но только правильно ли это ? 

Не знаю, я только начинаю знакомиться с ASP.NET.

Вот рабочий код, суть которого в следующем: на форме есть два DropDownList (dropDownListPostOrganizationID, который отображает коды организаций и dropDownListPost, который отображает наименование должностей для выбранной организации). При изменении значения кода организации обновляется список должностей.

Код выполняет следующее:
- формирует запрос к БД за уточненными данными;
- получает данные в виде ArrayList;
- заполняет полученными данными dropDownListPost.

Все просто, без хаков...

Код

protected void dropDownListPostOrganizationIDSelectedIndexChanged (object sender, System.EventArgs e)
{
    DataAccessLayer dataAccessLayer = GetDataAccessLayerForCurrentUser ("project_manager");

    // Select posts for selected organization.
    FbParameter organization = new FbParameter ("organization", FbDbType.BigInt);
    organization.Value = dropDownListPostOrganizationID.SelectedValue;
    FbCommand command = new FbCommand (
                    "select post.name " +
                    "from post " +
                        "inner join organization " +
                        "on post.organization_id = organization.id " +
                        "where coalesce('\"' || organization_type || '\" ', '') || " +
                        "organization.name = @organization;");
    command.Parameters.Add (organization);

    ArrayList arrayList = dataAccessLayer.GetArrayList (command);

    command.Dispose ();

    dropDownListPost.Items.Clear ();
    foreach (string s in arrayList)
        dropDownListPost.Items.Add (s);
}


Если убрать специфичный для проекта код, то получится вот такое:
Код

protected void dropDownListPostOrganizationIDSelectedIndexChanged (object sender, System.EventArgs e)
{
    ArrayList arrayList = ...
    dropDownListPost.Items.Clear ();
    foreach (string s in arrayList)
        dropDownListPost.Items.Add (s);
}

Т.е. получаем уточненную коллекцию данных и поэлементно добавляем значения в очищенный DropDownList.

Надеюсь поможет!

Добавлено через 3 минуты и 8 секунд
Код

<asp:DropDownList 
    id="dropDownListPostOrganizationID" 
    runat="server" 
    AutoPostBack="true"
    OnSelectedIndexChanged="dropDownListPostOrganizationIDSelectedIndexChanged" /> 

<asp:DropDownList 
    id="dropDownListPost"
    runat="server" />



--------------------
Слава Україні!
PM MAIL   Вверх
Yagmort
Дата 14.2.2011, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 17.6.2009

Репутация: нет
Всего: -1




<asp:DropDownList 
    id="dropDownListPost"
    runat="server" />

Только опять же вопрос, все отфильтровал, выбирается значение нормально, но как получить с него это  значение DDL.SelectedIthem.Value; возвращает всегда ""

Это сообщение отредактировал(а) Yagmort - 14.2.2011, 14:18
PM MAIL   Вверх
Gluttton
Дата 14.2.2011, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 2
Всего: 54



Yagmort, у DropDownList есть и DataTextField и DataValueField при работе с выборками из БД в первом удобно хранить текстовые поля, а во вторых их уникальные идентификаторы (например ключи).

Поэтому если в Value ничего не положить, то там ничего и не будет, и значение нужно искать в Text.


--------------------
Слава Україні!
PM MAIL   Вверх
Yagmort
Дата 14.2.2011, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 17.6.2009

Репутация: нет
Всего: -1



Цитата(Gluttton @ 14.2.2011,  14:33)
Yagmort, у DropDownList есть и DataTextField и DataValueField при работе с выборками из БД в первом удобно хранить текстовые поля, а во вторых их уникальные идентификаторы (например ключи).

Поэтому если в Value ничего не положить, то там ничего и не будет, и значение нужно искать в Text.

Я пробовал и так DDL.SelectedIthem.Value и так DDL.SelectedIthem.Text и ничего не выходит

Добавлено через 1 минуту и 37 секунд
   foreach (string s in arrayList)
{
dropDownListPost.Items.Add (s);
dropDownListPost.DataTextField=s;
}
и так тоже пробовал и потом получал значения, все равно ничего 
PM MAIL   Вверх
Yagmort
Дата 14.2.2011, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 339
Регистрация: 17.6.2009

Репутация: нет
Всего: -1



чет внятного ответа я так и не нашел...

Добавлено через 5 минут и 2 секунды
перепробовал за сегодня все варианты и понял, что с DDL похоэе ничего не выйдет ...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0590 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.