Eric Bergman
Eric Bergman

Reputation: 1443

ASP.NET: How to access a dynamically created control

I'm creating a bunch of Checkboxes dynamically:

CheckBox chkRead = new CheckBox();
chkRead.ID = "chk1";
chkRead.AutoPostBack = true;
chkRead.CheckedChanged += new EventHandler(CheckBox_CheckedChanged);

CheckBox chkPost = new CheckBox();
chkRead.ID = "chk2";
chkPost.AutoPostBack = true;
chkPost.CheckedChanged += new EventHandler(CheckBox_CheckedChanged);


 protected void CheckBox_CheckedChanged(object sender, EventArgs e)
 {
     CheckBox chk = (CheckBox)sender;


 }

What I want to do is the following: When I check the chkPost CheckBox I want the chkRead CheckBox to be checked as well

In the CheckBox_CheckedChanged event I only have access to the CheckBox that was clicked but I don't know how to check the other checkbox from that event.

Upvotes: 2

Views: 976

Answers (4)

pawciu
pawciu

Reputation: 935

Could you paste code where you are creating these checkboxes? Is it "OnInit" or somewhere else? Are you putting these checkboxes in container, do you store these controls as global variables or create them in method?

Upvotes: 0

Ann L.
Ann L.

Reputation: 13965

This is from memory, but you could do something like this:

protected void CheckBox_CheckedChanged(object sender, EventArgs e)
{
    CheckBox chk = (CheckBox)sender;
    CheckBox chkPost = (CheckBox) chk.NamingContainer.FindControl("chk2");
    CheckBox chkRead = (CheckBox) chk.NamingContainer.FindControl("chk1");
    if(chk == chkPost && chk.Checked)
    {  
        chkRead.Checked = true;
    }
} 

This is assuming you want to do all this in code-behind, after postback. If you want to do it in javascript, that's a different question.

This also assumes that chk1 and chk2 are in the same naming container. If they aren't, things will get complicated.

Upvotes: 3

ek_ny
ek_ny

Reputation: 10243

If you want to do it dynamically you can add an attribute to the checkboxess you are interested in-- you can then loop over the Page.Controls collection and test that the control you are looping over has that attribute and then you can check, or uncheck it.

some pseudo code:

foreach(var control in Page.Controls)
  if(typeof(Control) is CheckBox and ((CheckBox)control).Attributes["myAttr"] != null)
     //check or uncheck it

In reading your comment about nested controls-- this might be a bit of a hassle-- I tend to agree with Igor, that you should put the id's in a collection as they are being added dynamically.

Upvotes: 0

Igor
Igor

Reputation: 15893

Since it is your code that creates the checkboxes, you can store their references in a list or dictionary and retrieve them by id when needed.

Upvotes: 2

Related Questions