title: Programmatically created CheckBoxList not firing when "unchecked"
body: <p>I'm using ASP.NET and C#. I'm programmtically creating a checkboxlist. When I check an item, the SelectedIndexChanged event is firing. But, when I uncheck the item, the event is not fired. I'm binding the items on every postback and autopostback is set to true. Where am I going wrong? Here's the code -</p>
  
  <pre><code>page_load
  {
  
      var cblUser = new CheckBoxList();
      cblUser.AutoPostBack = true;
      cblUser.SelectedIndexChanged += cblUser_SelectedIndexChanged;
  
      var list = DAL.GetUsers();
      foreach (var user in list)
      {
          cblUser.Items.Add(new ListItem(user.Name, user.Id));
      }
  }
  </code></pre>
  
  <p>Thank you.</p>
  
  <p>Update #1: Actual code -</p>
  
  <pre><code>public partial class CategoriesAccordion : UserControl
      {
          public List&lt;Community&gt; AllCommunities
          {
              get
              {
                  if (Session["AllCommunities"] == null)
                  {
                      var db = new CommunityGuideDB();
                      Session["AllCommunities"] = db.Communities.OrderBy(x =&gt; x.Name).ToList();
                  }
                  return (List&lt;Community&gt;) Session["AllCommunities"];
              }
          }
  
          public List&lt;Category&gt; Categories
          {
              get
              {
                  if (Session["Categories"] == null)
                  {
                      var db = new CommunityGuideDB();
                      Session["Categories"] = db.Categories.OrderBy(x =&gt; x.Name).ToList();
                  }
                  return (List&lt;Category&gt;) Session["Categories"];
              }
          }
  
          public event EventHandler Categories_Selected = delegate { };
  
          protected void Page_Load(object sender, EventArgs e)
          {
              if (!IsPostBack) Session.Remove("Categories");
              LoadCategories();
          }
  
          private void LoadCategories()
          {
              foreach (var parent in Categories.Where(item =&gt; item.ParentId == null &amp;&amp; item.ShowAsPivot == true).OrderBy(x =&gt; x.DisplayOrder))
              {
                  var pane = new AccordionPane {ID = parent.Name};
                  pane.HeaderContainer.Controls.Add(new LiteralControl(parent.Name));
  
                  var cblValues = new CheckBoxList();
                  cblValues.AutoPostBack = true;
                  cblValues.SelectedIndexChanged += cblValues_SelectedIndexChanged;
                  foreach (var child in Categories.Where(child =&gt; child.ParentId == parent.Id))
                  {
                      var communityCount = child.CommunityCategory.Where(x =&gt; x.Categories_Id == child.Id).Count();
                      cblValues.Items.Add(new ListItem(string.Format("{0} ({1})", child.Name, communityCount), child.Id.ToString()));
                  }
  
                  pane.ContentContainer.Controls.Add(cblValues);
                  acdFilters.Panes.Add(pane);
              }
          }
  
          protected void cblValues_SelectedIndexChanged(object sender, EventArgs e)
          {
              var cblValues = ((CheckBoxList) sender);
              var selectedCategories = (from ListItem item in cblValues.Items where item.Selected select Categories.Find(c =&gt; c.Id == new Guid(item.Value))).ToList();
              Categories_Selected(this, new CommandEventArgs("SelectedCategories", selectedCategories));
          }
      }
  </code></pre>