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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое создание списка DropDownList 
V
    Опции темы
Беспечный
Дата 29.3.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Задача такая: необходимо при загрузке страницы динамически создать DropDownList. При выборе в нем какого-либо значения - добавить ещё один дропдаун, и т.д. При этом необходимо чтобы при постбэках сохранялись выбранные значения в ранее созданных дропдаунах.

Какой должен быть план действий?
PM MAIL ICQ   Вверх
Mymik
Дата 29.3.2007, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Цитата(Беспечный @  29.3.2007,  15:51 Найти цитируемый пост)
При этом необходимо чтобы при постбэках сохранялись выбранные значения в ранее созданных дропдаунах.

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



Цитата(Беспечный @  29.3.2007,  15:51 Найти цитируемый пост)
план действий

1) Открыть Microsoft Visual Studio.
2) Создать Web Project
3) Начать писать страницу

При возникновении трудностей в написании
1) Открываешь Браузер для серфинга в интернете.
2) Вводишь в браузер forum.vingrad.ru
3) нажимаешь Enter
4) выбираешь разде ".NET"
5) Выбираешь ветку Asp.net
6) Ищешь подобную тему в ветке, если таковой нет -- создаешь новую.



--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
Беспечный
Дата 29.3.2007, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот примерная реализация того, что мне нужно. Но приложение неправильно работает, т.к. событие ddl_TextChanged происходит уже после того, как контролы были размещены на странице. Как здесь быть?
Код

public partial class _Default : System.Web.UI.Page
{
    ArrayList ddllist;

    public int DropCount
    {
        get
        {
            if (ViewState["cnt"] == null)
                return 1;
            else
                return (int)ViewState["cnt"];
        }
        set { ViewState["cnt"] = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        ddllist = new ArrayList();
        AddToList(DropCount);
        DropCount = ddllist.Count;
        foreach (DropDownList dd in ddllist)
            PlaceHolder1.Controls.Add(dd);
    }

    private void AddToList(int count)
    {
        int i;
        for (i = 0; i < count; i++)
        {
            DropDownList ddl = new DropDownList();
            ddl.AutoPostBack = true;
            ddl.EnableViewState = true;
            ddl.TextChanged += new EventHandler(ddl_TextChanged);
 
            ddl.Items.Add(new ListItem("item 1", "1"));
            ddl.Items.Add(new ListItem("item 2", "2"));
            ddl.Items.Add(new ListItem("item 3", "3"));

            ddllist.Add(ddl);
        }
    }

    protected void ddl_TextChanged(object sender, EventArgs e)
    {
        AddToList(1);
        DropCount = ddllist.Count;
    }
}

PM MAIL ICQ   Вверх
Mymik
Дата 30.3.2007, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



Беспечный, Вынеси кусок кода который создает DropDawnList в отдельный метод и вызывай его после того как ты добавляешь количество контролов.
Код

    private void AddToList(int count)
    {
        int i;
        for (i = 0; i < count; i++)
            ddllist.Add(addNewItem());
    }
    protected void ddl_TextChanged(object sender, EventArgs e)
    {
        AddToList(1);
        DropCount = ddllist.Count;
        /* Добавление элемента в PlaceHolder */
        PlaceHolder1.Controls.Add(addNewItem());
    }
    /* Отдельный метод для создания DropDownList */
    private DropDownList addNewItem()
    {
        DropDownList ddl = new DropDownList();
        ddl.AutoPostBack = true;
        ddl.EnableViewState = true;
        ddl.TextChanged += new EventHandler(ddl_TextChanged);

        ddl.Items.Add(new ListItem("item 1", "1"));
        ddl.Items.Add(new ListItem("item 2", "2"));
        ddl.Items.Add(new ListItem("item 3", "3"));

        return ddl;
    }



Добавлено через 3 минуты и 22 секунды
Беспечный, Кстати, у тебя есть баг, что после добавления элементов(к примеру 5-и штук) я возбуждаю событие TextChanged к примеру во втором элементе после чего все последующие элементы должны перестраиваться. А вместо этого я получаю дополнительный элемент ;о). Исправляй 


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
Беспечный
Дата 30.3.2007, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Понятно в чем была ошибка. Получается, в ddl_TextChanged просто создаем один дропдаун в памяти, чтобы он отрисовался при следующем постбэке, а для текущего - дропдаун помещаем в PlaceHolder. Я правильно все понял?
Цитата

Беспечный, Кстати, у тебя есть баг, что после добавления элементов(к примеру 5-и штук) я возбуждаю событие TextChanged к примеру во втором элементе после чего все последующие элементы должны перестраиваться. А вместо этого я получаю дополнительный элемент ;о). Исправляй 

А здесь, я думаю, просто добавить ссылку на последний созданный дропдаун, и в ddl_TextChanged проверять sender'а. Исправим.

Спасибо! smile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

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

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

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


 




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


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

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