cmj
cmj

Reputation: 107

Why won't my SelectedIndexChanged event fire in Button_Click?

protected void Button1_Click(object sender, EventArgs e)
{
    TableRow tb = new TableRow();
    TableCell tc = new TableCell();

    DropDownList db = new DropDownList();
    db.Items.Add("Bangalore");
    db.Items.Add("Mandya");
    db.Items.Add( "Hassan");

    tc.Controls.Add(db);
    tb.Controls.Add(tc);

    Table1.Controls.Add(tb);

    db.SelectedIndexChanged += db_SelectedIndexChanged;
    db.AutoPostBack = true;
}

private void db_SelectedIndexChanged(object sender, EventArgs e)
{
    label.text = "welcome";
}

When this code executes in the Button1_Click event, db_SelectedIndexChanged doesn't execute. However, when I place the same Button1_Click code block in the Page_Load event, db_SelectedIndexChanged executes.

What may be the reason behind this?

Upvotes: 1

Views: 328

Answers (3)

tareq_moinul
tareq_moinul

Reputation: 109

    protected void Button1_Click(object sender, EventArgs e)
   {
     TableRow tb = new TableRow();
     TableCell tc = new TableCell();

     DropDownList db = new DropDownList();
    db.Items.Add("Bangalore");`
    db.Items.Add("Mandya");
    db.Items.Add( "Hassan");

    tc.Controls.Add(db);
    tb.Controls.Add(tc);

   Table1.Controls.Add(tb);

   db.SelectedIndexChanged += db_SelectedIndexChanged;
   db.AutoPostBack = true;
   db_SelectedIndexChanged(null,null); // use this line, i hope it will work now.

  }

  private void db_SelectedIndexChanged(object sender, EventArgs e)
  {
    label.text = "welcome";
  }

You can try this one.

Upvotes: 0

Eranga
Eranga

Reputation: 32447

You are creating a dynamic control. The event will not fire unless you create the control in the PreInit method of the page.

protected void Page_PreInit(object sender, EventArgs e)
{
    DropDownList db = new DropDownList();
    db.Items.Add("Bangalore");
    db.Items.Add("Mandya");
    db.Items.Add( "Hassan");
    db.SelectedIndexChanged += db_SelectedIndexChanged;
    db.AutoPostBack = true;

    tc.Controls.Add(db);
}

Check Page Life cycle for more info.

Upvotes: 1

Crab Bucket
Crab Bucket

Reputation: 6277

Try to put

db.SelectedIndexChanged += db_SelectedIndexChanged;
db.AutoPostBack = true;

In the Page_Load event.

Don't wrap db.SelectedIndexChanged += db_SelectedIndexChanged; in !Page.IsPostBack as the events need to be wired up on each load

Upvotes: 5

Related Questions