Home All Groups Group Topic Archive Search About

Adding EventHandler to DropDownList programically

Author
7 Sep 2006 1:31 PM
dtarczynski
Hello.
Im trying to add new EventHandler to DropDownList programically. Im
doing something like this:

DropDownList ddlCate = new DropDownList();
            ddlCate.ID = String.Format("ddlCategory{0}", i++);
            ddlCate.DataSource = tblSub1;
            ddlCate.DataTextField =
tblSub1.Columns["categories_name"].ColumnName;
            ddlCate.DataValueField =
tblSub1.Columns["categories_id"].ColumnName;
            Panel1.Controls.Add(ddlCate);
            ddlCate.DataBind();
            ddlCate.AutoPostBack = true;
            ddlCate.SelectedIndexChanged += new
System.EventHandler(BindCategories);

This is BindCategories function:

void BindCategories(object sender, EventArgs e)
    {
        Response.Write("Event raised!");

    }

but when Im changing value in ddlCate BindCategories are not raised.
Any help?

thanks in advandce
Darek

Author
7 Sep 2006 1:55 PM
Karl Seguin [MVP]
My guess s that you have your code in a if (!Page.IsPostBack){}

since events happen on postback, they need to be setup during postback.
Normally you'd just place the hook during init...

onInit(object source, EventArgs e)
{
   ddlCate.SelectedIndexChanged +=....
}

since it's dynamic, simply put it out side the !Page.IsPostback

Karl

Show quoteHide quote
"dtarczynski" <dtarczyn***@gmail.com> wrote in message
news:1157635915.253863.56050@h48g2000cwc.googlegroups.com...
> Hello.
> Im trying to add new EventHandler to DropDownList programically. Im
> doing something like this:
>
> DropDownList ddlCate = new DropDownList();
>            ddlCate.ID = String.Format("ddlCategory{0}", i++);
>            ddlCate.DataSource = tblSub1;
>            ddlCate.DataTextField =
> tblSub1.Columns["categories_name"].ColumnName;
>            ddlCate.DataValueField =
> tblSub1.Columns["categories_id"].ColumnName;
>            Panel1.Controls.Add(ddlCate);
>            ddlCate.DataBind();
>            ddlCate.AutoPostBack = true;
>            ddlCate.SelectedIndexChanged += new
> System.EventHandler(BindCategories);
>
> This is BindCategories function:
>
> void BindCategories(object sender, EventArgs e)
>    {
>        Response.Write("Event raised!");
>
>    }
>
> but when Im changing value in ddlCate BindCategories are not raised.
> Any help?
>
> thanks in advandce
> Darek
>
Are all your drivers up to date? click for free checkup

Author
7 Sep 2006 7:32 PM
dtarczynski
Thanks for respose, but mayby you can answer me in more detail. Look
Karl. I have one DropDownList ddlCategories (I create it with
designer), then I have added code for SelectedItemIndexChanged. I have
to create another DropDownList when ddlCategories
SelectedItemIndexChanged is raised. All my code looks like this:

protected void Page_Load(object sender, EventArgs e)
    {


    }

    protected void ddlCategories_SelectedIndexChanged(object sender,
EventArgs e)
    {

            if (...)
            {
                int i = 0;
                DropDownList ddlCate = new DropDownList();
                ddlCate.ID = String.Format("ddlCategory{0}", i++);
                ddlCate.DataSource = tblSub1;
                ddlCate.DataTextField =
tblSub1.Columns["categories_name"].ColumnName;
                ddlCate.DataValueField =
tblSub1.Columns["categories_id"].ColumnName;
                pnlCat.Controls.Add(ddlCate);
                ddlCate.DataBind();
                ddlCate.AutoPostBack = true;
                ddlCate.SelectedIndexChanged += new
System.EventHandler(BindCategories);
            }


    }

    void BindCategories(object sender, EventArgs e)
    {
        Response.Write("Event raised!");

    }

Can you answer me, how to properly add this event handler please?

Karl Seguin [MVP] napisal(a):
Show quoteHide quote
> My guess s that you have your code in a if (!Page.IsPostBack){}
>
> since events happen on postback, they need to be setup during postback.
> Normally you'd just place the hook during init...
>
> onInit(object source, EventArgs e)
> {
>    ddlCate.SelectedIndexChanged +=....
> }
>
> since it's dynamic, simply put it out side the !Page.IsPostback
>
> Karl

Bookmark and Share