События динамических контролов
От: Romashkin  
Дата: 25.11.06 15:37
Оценка:
Всем привет.

Нужна помощь в следующей проблеме:

на aspx-странице есть кнопка (Button1), по на жатии на которкю вызывается обработчик_события_Сlick,
который добавляет на страницу динамически-создаваемые контролы (CheckBox).

при добавлении этих контролов я подписываю их событие CheckedChanged к обработчику_события_onCheck и ставлю autopostback=true.

Проблема в том, что при вызове события CheckedChanged (нажатие на флажок чекбокса) делается рефреш страницы, а обработчик не срабатывает и динамически-созданные чекбоксы опять исчезают.

Вопрос: как сделать так чтобы срабатывал обработчик события этих динамических чекбоксов.

Заранее спасибо!

код:


public partial class admin_test : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }


    protected void draw()
    {
        CheckBox newCB;
        newCB = new CheckBox();
        newCB.InputAttributes.Add("value", "somevalue");
        newCB.AutoPostBack = true;
        newCB.Text = "unchecked";
        newCB.CheckedChanged += new EventHandler(onCheck);
        form1.Controls.Add(newCB);
    }

    protected void onCheck(object sender, EventArgs e)
    {
        CheckBox cbx = (CheckBox)sender;
        cbx.Text = "checked";
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        draw();
    }
}
Re: События динамических контролов
От: RustM Россия  
Дата: 25.11.06 17:26
Оценка:
Здравствуйте, Romashkin, Вы писали:

R>Проблема в том, что при вызове события CheckedChanged (нажатие на флажок чекбокса) делается рефреш страницы, а обработчик не срабатывает и динамически-созданные чекбоксы опять исчезают.

Проблема в том, что при рефреше контролов, события которых должны были сработать, просто нет. Ты ведь их не добавил.

R>Вопрос: как сделать так чтобы срабатывал обработчик события этих динамических чекбоксов.

Запоминай (как думай сам), какие контролы ты насоздавал, и при рефреше создавай их заново.
... << RSDN@Home 1.2.0 alpha rev. 668>>
Re[2]: События динамических контролов
От: Romashkin  
Дата: 25.11.06 18:30
Оценка:
Спасибо, RustM.

RM>Запоминай (как думай сам), какие контролы ты насоздавал, и при рефреше создавай их заново.


а какие способы запоминания существуют? просто чекбоксы генерируются на основе данных базы данных, и не хочется каждый раз на Page_Load подключаться к базе данных зря..
Re[3]: События динамических контролов
От: Antipod  
Дата: 27.11.06 08:31
Оценка:
Здравствуйте, Romashkin, Вы писали:

R>Спасибо, RustM.


RM>>Запоминай (как думай сам), какие контролы ты насоздавал, и при рефреше создавай их заново.


R>а какие способы запоминания существуют? просто чекбоксы генерируются на основе данных базы данных, и не хочется каждый раз на Page_Load подключаться к базе данных зря..



Можно создать, например, массив в котором хранить ID из базы и положить в стэйт (State). А в Page_Load брать из стэйта и формировать контролы, при этом коннектится к базы не надо. Можно создать ArrayList и хранить объекты со всеми нужными данными для добавления чекбокса (ID, label, etc) в стэйте. Тут широкое поле для творчества и деятельности. Подробнее про стэйты в ASP.Net в MSDN здесь.
Re: События динамических контролов
От: Аноним  
Дата: 25.11.06 16:54
Оценка:
Насколько я понимаю то, что вы пытаетесь сделать сделать нельзя. Причина? Вы создаете динамические объекты в момент, когда ViewState для страницы уже создана. Т.е. — при PostBack-e только то, что находится во ViewState коллекции будет пересоздано. Чтобы то, что вы хотите сделать работало так, как вам нужно, нужно добавлять объекты динамически в событиях Page_Load или OnInit()/InitializeComponent(). Только при данных условиях динамически созданные контроллы будут пересоздаваться автоматически с сохранением событий и значений. В остальных случаях вам придется заниматься мазохизмом и создавать что то наподобие АСП-эшного ViewState-a. Или создать заранее контроллы, сделать их невидимыми и активизировать их при нажатии какой то кнопки. Но в этом случае вам заранее надо знать, сколько контролов вы будете "создавать динамически" .


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Re[2]: События динамических контролов
От: Аноним  
Дата: 25.11.06 18:59
Оценка:
RomashkinСпасибо, RustM.

RM>Запоминай (как думай сам), какие контролы ты насоздавал, и при рефреше создавай их заново.


а какие способы запоминания существуют? просто чекбоксы генерируются на основе данных базы данных, и не хочется каждый раз на Page_Load подключаться к базе данных зря..
Session? Cache? Application?


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.